{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Linear Regression Refresh\n",
    "\n",
    "In the last [lesson](https://github.com/VikParuchuri/zero_to_gpt/blob/master/explanations/linreg.ipynb), we learned how to use gradient descent to train a linear regression algorithm.  In this lesson, we'll extend what we built to make a multi layer neural network.\n",
    "\n",
    "Before we dive in, let's quickly refresh on linear regression.  Let's say we're trying to predict tomorrow's temperature (`tmax_tomorrow`) using today's max temperature (`tmax`), today's min temperature (`tmin`), and how much it rained today (`rain`).\n",
    "\n",
    "We'll call tomorrow's temperature $y$, `tmax` $x_{1}$, `tmin` $x_{2}$, and `rain` $x_{3}$.\n",
    "\n",
    "Then we can predict tomorrow's temperature using the equation $\\hat{y}=w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{4} + b$.  $\\hat{y}$ is our prediction for tomorrow's temperature.  The $w$ values are called weights, and the $b$ value is called a bias.\n",
    "\n",
    "We multiply each of our $x$ values by its corresponding weight, then add in the bias.  In the last lesson, we learned how to calculate the $w$ and $b$ values.\n",
    "\n",
    "## Nonlinearity\n",
    "\n",
    "A big limitation of linear regression is that the prediction will always be linearly related to the inputs.  In real-world data, this is rarely the case."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's say we're predicting `tmax_tomorrow` using only `tmax`.  Then the equation is simplified to $\\hat{y}=w_{1}x_{1} + b$.  We can say that $w_{1}$ is `.82`, and $b$ is `11.99`.\n",
    "\n",
    "Now, let's load in our data and graph `tmax_tomorrow` and `tmax`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot: xlabel='tmax', ylabel='tmax_tomorrow'>"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABb50lEQVR4nO3de1yUdd4//tdwkIPKwQFBDJFTpomFkQZYabp2dk23NtdVt/Wuuztd005qd3pvffOQW1a6llvrL3PrbrU789baDmaGCQQo4G3pIgiIihwFRkCMw/X7g51xruGameua81y8no8Hj4dcM3PNZ7hGeTvX63q/NYIgCCAiIiJSKR93L4CIiIjImVjsEBERkaqx2CEiIiJVY7FDREREqsZih4iIiFSNxQ4RERGpGosdIiIiUjU/dy/AE/T09KC6uhqDBw+GRqNx93KIiIhIBkEQcOnSJcTExMDHx/znNyx2AFRXVyM2NtbdyyAiIiIbnD17Ftdcc43Z21nsABg8eDCA3h9WSEiIm1dDREREcuh0OsTGxhp+j5vDYgcwnLoKCQlhsUNERORlrEVQGFAmIiIiVWOxQ0RERKrGYoeIiIhUjcUOERERqRqLHSIiIlI1FjtERESkaix2iIiISNVY7BAREZGqsdghIiIiVWOxQ0RERKrGcRFELlZe34ozF9sxUjsQ8RED3b0cIiLVY7FD5CLN7T9jyUfFOFRab9h2W3IkNs9JRWiwvxtXRkSkbjyNReQiSz4qRnZZg2hbdlkD/vBRkZtWRETUP7DYIXKB8vpWHCqtR7cgiLZ3CwIOldajoqHNTSsjIlI/FjtELnDmYrvF2ysbWewQETkLix0iF4gbEmzx9pFaBpWJiJyFxQ6RCyREDsJtyZHw1WhE2301GtyWHMmrsoiInIjFDpGLbJ6TisykCNG2zKQIbJ6T6qYVERH1D24tdg4dOoT7778fMTEx0Gg02LNnj+G2zs5OLF++HCkpKRg4cCBiYmIwf/58VFdXi/Zx8eJFzJ07FyEhIQgLC8PChQvR2trq4ldCZF1osD92LJyAg89MxnuP3IyDz0zGjoUTeNk5EZGTubXYaWtrww033IAtW7b0ua29vR2FhYVYtWoVCgsLsXv3bpSUlGDGjBmi+82dOxc//fQT9u/fj88++wyHDh3CY4895qqXQKRYfMRATBk1lKeuiIhcRCMIJtfCuolGo8Gnn36KmTNnmr1PQUEBJkyYgDNnzmDEiBE4efIkxowZg4KCAqSlpQEAvvzyS9xzzz04d+4cYmJiZD23TqdDaGgoWlpaEBIS4oiXQ0RERE4m9/e3V2V2WlpaoNFoEBYWBgDIzc1FWFiYodABgGnTpsHHxwd5eXlm93PlyhXodDrRFxEREamT1xQ7HR0dWL58OebMmWOo3mpqajB06FDR/fz8/DBkyBDU1NSY3de6desQGhpq+IqNjXXq2omIiMh9vKLY6ezsxEMPPQRBEPD222/bvb+VK1eipaXF8HX27FkHrJKIiIg8kccPAtUXOmfOnMG3334rOicXHR2Nuro60f27urpw8eJFREdHm91nQEAAAgICnLZmIiIi8hwe/cmOvtApLS3FN998A61WK7o9PT0dzc3NOHr0qGHbt99+i56eHkycONHVyyUiIiIP5NZPdlpbW1FWVmb4vqKiAsXFxRgyZAiGDRuGX/3qVygsLMRnn32G7u5uQw5nyJAhGDBgAEaPHo277roLjz76KLZu3YrOzk4sXrwYDz/8sOwrsYiIiEjd3Hrp+XfffYcpU6b02b5gwQL88Y9/RHx8vOTjDh48iMmTJwPobSq4ePFi7Nu3Dz4+Ppg9ezY2bdqEQYMGyV4HLz0nIiLyPnJ/f3tMnx13YrFDRETkfVTZZ4eIiIhIKRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlVjsUNERESqxmKHiIiIVI3FDhEREakaix0iIiJSNRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlVjsUNERESqxmKHiIiIVI3FDhEREakaix0iIiJSNRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlVjsUNERESqxmKHiIiIVI3FDhEREakaix0iIiJSNRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlVjsUNERESqxmKHiIiIVI3FDhEREakaix0iIiJSNRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlVjsUNERESqxmKHiIiIVI3FDhEREakaix0iIiJSNRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlVjsUNERESqxmKHiIiIVI3FDhEREakaix0iIiJSNRY7REREpGosdoiIiEjVWOwQERGRqrHYISIiIlXzc/cCiIjI+5TX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Z84cd70kVbN0vH7++WdhxowZwjXXXCMUFxcLFy5cMHxduXLFsA9PPF4sdtzMtNi5fPmy8MQTTwjh4eFCcHCw8MADDwgXLlxw3wL7sX379gljx44VAgIChOuuu0545513RLf39PQIq1atEqKiooSAgABh6tSpQklJiZtW27/pdDrhySefFEaMGCEEBgYKCQkJwn/+53+K/gHm8XKPgwcPCgD6fC1YsEAQBHnHpbGxUZgzZ44waNAgISQkRHjkkUeES5cuueHVqJ+l41VRUSF5GwDh4MGDhn144vHSCIJRi1EiIiIilWFmh4iIiFSNxQ4RERGpGosdIiIiUjUWO0RERKRqLHaIiIhI1VjsEBERkaqx2CEiIiJVY7FDREREqsZih4iIiFSNxQ4RebTJkydj6dKl7l4GEXkxFjtERESkaix2iMhj/e53v0NWVhbefPNNaDQaaDQabN++HRqNBl999RVSU1MRFBSEO+64A3V1dfjiiy8wevRohISE4De/+Q3a29sN+/ryyy8xadIkhIWFQavV4r777sPp06cNt+/YsQODBg1CaWmpYdsTTzyB6667TrQfIvI+HARKRB6rpaUFd999N8aOHYuXXnoJAPDTTz9h2rRpuOWWW/Dqq68iODgYDz30EIYPH46AgACsX78era2teOCBB/Dss89i+fLlAIBPPvkEGo0G48aNQ2trK1avXo3KykoUFxfDx6f3/30PPfQQKisrkZOTg6+++goPPPAAcnNzcdNNN7ntZ0BE9mOxQ0QebfLkybjxxhvxxhtvAAC+++47TJkyBd988w2mTp0KAFi/fj1WrlyJ06dPIyEhAQDw+OOPo7KyEl9++aXkfhsaGhAZGYnjx49j7NixAICmpiaMGzcO999/P3bv3o0lS5bg+eefd/6LJCKn4mksIvJK48aNM/w5KioKwcHBhkJHv62urs7wfWlpKebMmYOEhASEhIRg5MiRAICqqirDfcLDw7Ft2za8/fbbSExMxIoVK5z/QojI6fzcvQAiIlv4+/sb/qzRaETf67f19PQYvr///vsRFxeHd999FzExMejp6cHYsWPx888/ix536NAh+Pr64sKFC2hra8PgwYOd+0KIyOn4yQ4RebQBAwagu7vbrn00NjaipKQEL7zwAqZOnYrRo0ejqampz/1ycnLwyiuvYN++fRg0aBAWL15s1/MSkWfgJztE5NFGjhyJvLw8VFZWYtCgQaJPa+QKDw+HVqvFO++8g2HDhqGqqqrPKapLly5h3rx5WLJkCe6++25cc801uPnmm3H//ffjV7/6laNeDhG5AT/ZISKP9swzz8DX1xdjxoxBZGSkKGMjl4+PD/7+97/j6NGjGDt2LJYtW4Y//elPovs8+eSTGDhwINauXQsASElJwdq1a/Hv//7vOH/+vENeCxG5B6/GIiIiIlXjJztERESkaix2iIiISNVY7BAREZGqsdghIiIiVWOxQ0RERKrGYoeIiIhUjcUOERERqRqLHSIiIlI1FjtERESkaix2iIiISNVY7BAREZGq/f8hbHgqCEDJRwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "# Read in the data\n",
    "data = pd.read_csv(\"../data/clean_weather.csv\", index_col=0)\n",
    "# Fill in any missing values in the data with past values\n",
    "data = data.ffill()\n",
    "\n",
    "# Create a scatter plot of tmax and tmax_tomorrow\n",
    "data.plot.scatter(\"tmax\", \"tmax_tomorrow\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see above, the relationship between `tmax` and `tmax_tomorrow` isn't perfectly linear.  We can show this by drawing a linear regression line using $w_{1}$ equals `.82`, and $b$ equals `11.99`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1440979d0>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGwCAYAAABPSaTdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABxX0lEQVR4nO3dd3gUBfoH8O9sSSdt0wgGCBApAhJFugiK2AAVKz9ERKx0sMIJJ56KXaogHuJxerYTEfBEETBIERASDoULgQAB0ntPtszvj7hrNmx2Z+vsbr6f5+F5yOzM7Ls7C/tm5p33FURRFEFERETkpxRyB0BERETkTkx2iIiIyK8x2SEiIiK/xmSHiIiI/BqTHSIiIvJrTHaIiIjIrzHZISIiIr+mkjsAb2AwGJCbm4t27dpBEAS5wyEiIiIJRFFEVVUVEhMToVC0fv6GyQ6A3NxcJCUlyR0GEREROeD8+fO47LLLWn2cyQ6Adu3aAWh6s8LDw2WOhoiIiKSorKxEUlKS6Xu8NUx2ANOlq/DwcCY7REREPsZWCQoLlImIiMivMdkhIiIiv8Zkh4iIiPwakx0iIiLya0x2iIiIyK8x2SEiIiK/xmSHiIiI/BqTHSIiIvJrTHaIiIjIrzHZISIiIr/GcRFEfi67qBrnSmvRWROK5JhQucMhIvI4JjtEfqq8thGzPs3A7qwi07LhKbFYMSEVESFqGSMjIvIsXsYi8lOzPs3A3lPFZsv2nirGzE/TZYqIiEgeTHaI/FB2UTV2ZxVBL4pmy/WiiN1ZRThTXCNTZEREnsdkh8gPnSuttfr42RImO0TUdjDZIfJDnaJDrD7eWcNCZSJqO5jsEPmhLrFhGJ4SC6UgmC1XCgKGp8TyriwialOY7BD5qRUTUjG0W4zZsqHdYrBiQqpMERERyUPWZGf37t0YO3YsEhMTIQgCNm3aZHpMq9XiueeeQ58+fRAaGorExEQ8+OCDyM3NNdtHaWkpJk6ciPDwcERGRmLq1Kmorq728Csh8j4RIWpsmDoAu54egfVTrsGup0dgw9QBvO2ciNocWZOdmpoaXHnllVi1atUlj9XW1uLIkSNYuHAhjhw5go0bNyIzMxPjxo0zW2/ixIn4/fffsX37dmzduhW7d+/GY4895qmXQOT1kmNCMbJ7HC9dEVGbJYhii3tTZSIIAr7++mvccccdra5z6NAhDBgwAOfOnUPHjh1x4sQJ9OrVC4cOHUL//v0BANu2bcOtt96KCxcuIDExUdJzV1ZWIiIiAhUVFQgPD3fFyyEiIiI3k/r97VM1OxUVFRAEAZGRkQCA/fv3IzIy0pToAMCoUaOgUChw4MCBVvfT0NCAyspKsz9ERETkn3wm2amvr8dzzz2HCRMmmLK3/Px8xMXFma2nUqkQHR2N/Pz8Vve1ZMkSREREmP4kJSW5NXYiIiKSj08kO1qtFvfeey9EUcTq1aud3t/8+fNRUVFh+nP+/HkXRElERETeyOsHgRoTnXPnzmHnzp1m1+QSEhJQWFhotr5Op0NpaSkSEhJa3WdgYCACAwPdFjMRERF5D68+s2NMdLKysvDjjz9Co9GYPT548GCUl5fj8OHDpmU7d+6EwWDAwIEDPR0uEREReSFZz+xUV1fj1KlTpp/PnDmDjIwMREdHo3379rj77rtx5MgRbN26FXq93lSHEx0djYCAAPTs2RM333wzHn30UaxZswZarRYzZszA/fffL/lOLCIiIvJvst56/tNPP2HkyJGXLJ88eTJefPFFJCcnW9xu165dGDFiBICmpoIzZszAli1boFAocNddd2H58uUICwuTHAdvPSciIvI9Ur+/vabPjpyY7BAREfkev+yzQ0RERGQvJjtERETk15jsEBERkV9jskNERER+jckOERER+TUmO0REROTXmOwQERGRX2OyQ0RERH6NyQ4RERH5NSY7RERE5NeY7BAREZFfY7JDREREfo3JDhEREfk1JjtERETk15jsEBERkV9jskNERER+jckOERER+TUmO0REROTXmOwQERGRX2OyQ0RERH6NyQ4RERH5NSY7RERE5NeY7BAREZFfY7JDREREfo3JDhEREfk1JjtERETk15jsEBERkV9jskNERER+jckOERER+TUmO0RERGS3/xX/D49sfgRavVbuUGxSyR0AERER+Q6dQYe39r2FF396EQ36BnSJ6oIF1y6QOyyrmOwQERGRJMcKjmHKN1NwOO8wAODmbjdjUt9JMkdlG5MdIiIisqpR34jX9ryGl3e/DK1Bi8igSCy9aSkevPJBCIIgd3g2MdkhIiKiVh3JO4Ip30zBfwv+CwAY130cVt+2GontEmWOTDomO0RERHSJBl0DXkp7Ca/vfR16UQ9NsAYrblmB+3vf7xNnc5pjskNERERm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m2++Ef/73/+Kt99+u5icnCzW1dXJGLl/mTx5stihQwdx69at4pkzZ8SNGzeKMTEx4rPPPmtah8fBPaqqqsT09HQxPT1dBCC+8847Ynp6uukuHynv+8033yympqaKBw4cEPfs2SOmpKSIEyZMkOsl+SRrx6GxsVEcN26ceNlll4kZGRliXl6e6U9DQ4NpH952HJjskEUtk526ujpx2rRpYlRUlBgSEiLeeeedYl5ennwB+qktW7aIvXv3FgMDA8UePXqIa9euNXvcYDCICxcuFOPj48XAwEDxhhtuEDMzM2WK1j9VVlaKs2fPFjt27CgGBQWJXbp0Ef/yl7+Y/UfO4+Aeu3btEgFc8mfy5MmiKEp730tKSsQJEyaIYWFhYnh4uDhlyhSxqqpKhlfju6wdhzNnzlh8DIC4a9cu0z687TgIotisLSgRERGRn2HNDhEREfk1JjtERETk15jsEBERkV9jskNERER+jckOERER+TUmO0REROTXmOwQERGRX2OyQ0RERH6NyQ4RERH5NSY7ROTVRowYgTlz5sgdBhH5MCY7RERE5NeY7BCR13rooYeQlpaGZcuWQRAECIKAjz76CIIg4Pvvv0dqaiqCg4Nx/fXXo7CwEN999x169uyJ8PBw/N///R9qa2tN+9q2bRuGDRuGyMhIaDQajBkzBqdPnzY9vmHDBoSFhSErK8u0bNq0aejRo4fZfojI93AQKBF5rYqKCtxyyy3o3bs3XnrpJQDA77//jlGjRmHQoEF46623EBISgnvvvRcdOnRAYGAgXnvtNVRXV+POO+/EM888g+eeew4A8NVXX0EQBPTt2xfV1dVYtGgRzp49i4yMDCgUTb/33XvvvTh79iz27duH77//HnfeeSf279+Pq6++Wrb3gIicx2SHiLzaiBEj0K9fPyxduhQA8NNPP2HkyJH48ccfccMNNwAAXnvtNcyfPx+nT59Gly5dAABPPPEEzp49i23btlncb3FxMWJjY3Hs2DH07t0bAFBWVoa+ffti7Nix2LhxI2bNmoUFCxa4/0USkVvxMhYR+aS+ffua/h4fH4+QkBBTomNcVlhYaPo5KysLEyZMQJcuXRAeHo7OnTsDAHJyckzrREVFYd26dVi9ejW6du2K559/3v0vhIjcTiV3AEREjlCr1aa/C4Jg9rNxmcFgMP08duxYdOrUCR988AESExNhMBjQu3dvNDY2mm23e/duKJVK5OXloaamBu3atXPvCyEit+OZHSLyagEBAdDr9U7to6SkBJmZmXjhhRdwww03oGfPnigrK7tkvX379uH111/Hli1bEBYWhhkzZjj1vETkHXhmh4i8WufOnXHgwAGcPXsWYWFhZmdrpIqKioJGo8HatWvRvn175OTkXHKJqqqqCpMmTcKsWbNwyy234LLLLsM111yDsWPH4u6773bVyyEiGfDMDhF5taeffhpKpRK9evVCbGysWY2NVAqFAp999hkOHz6M3r17Y+7cuXjzzTfN1pk9ezZCQ0Px6quvAgD69OmDV199FY8//jguXrzoktdCRPLg3VhERETk13hmh4iIiPwakx0iIiLya0x2iIiIyK8x2SEiIiK/xmSHiIiI/BqTHSIiIvJrTHaIiIjIrzHZISIiIr/GZIeIiIj8GpMdIiIi8mtMdoiIiMiv/T8ul7QGeadoFAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "data.plot.scatter(\"tmax\", \"tmax_tomorrow\")\n",
    "\n",
    "# Calculate the prediction given our weight and bias\n",
    "prediction = lambda x, w1=.82, b=11.99: x * w1 + b\n",
    "\n",
    "# Plot a linear regression line over our data\n",
    "plt.plot([30, 120], [prediction(30),prediction(120)], 'green')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The line fits our data as well as a linear regression line can fit it (the mean squared error between the predictions and the actual `tmax_tomorrow` is as low as possible)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "22.897335324598416\n",
      "23.489303834480715\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "def mse(actual, predicted):\n",
    "    # Calculate mean squared error\n",
    "    return np.mean((actual - predicted) ** 2)\n",
    "\n",
    "# Error with the weight of .82 and the bias of 11.99\n",
    "print(mse(data[\"tmax_tomorrow\"], prediction(data[\"tmax\"])))\n",
    "\n",
    "# Error with a small shift in our weight, to .83, and in our bias, to 12\n",
    "print(mse(data[\"tmax_tomorrow\"], prediction(data[\"tmax\"], .83, 12)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see above, even a small shift in our weight and bias away from our optimal values increases error.\n",
    "\n",
    "But the error is stil fairly high.  This is because our linear regression model isn't properly capturing the nonlinear interactions in our data.  For example, if `tmax` is `100`, maybe `tmax_tomorrow` will be `tmax` times `.7`, but if `tmax` is `50`, `tmax_tomorrow` might be `tmax` times `.8`.\n",
    "\n",
    "This type of relationship is nonlinear - the ratio between `tmax` and `tmax_tomorrow` isn't always a constant value like `.82`.\n",
    "\n",
    "If we plot tomorrow's temperature versus today's temperature, we can see that this is in fact the case:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x144199360>"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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AACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsKpHYWT16tUaMWKEsrKyVFhYqJqamlMuf/z4cc2bN095eXlyu936+te/rhdffLFHBQYAAMklI9YVNm3apLKyMlVUVKiwsFCrVq3StGnTVF9fr9zc3E7Lt7e368orr1Rubq6effZZDR8+XPv379fgwYOdKD8AAEhwLmOMiWWFwsJCfetb39Jjjz0mSQqFQsrPz9cvf/lLLVy4sNPyFRUVWrFihd555x0NGDCgR4UMBALyeDxqbm5WdnZ2j7YBAAD6V7TH75i6adrb21VbW6vi4uIvNpCWpuLiYlVXV3e5zvPPP6+ioiLNmzdPXq9XY8aM0fLlyxUMBrt9n7a2NgUCgYgJAAAkp5jCyNGjRxUMBuX1eiPme71e+f3+Ltf54IMP9OyzzyoYDOrFF1/U4sWL9fDDD+t3v/tdt+9TXl4uj8cTnvLz82MpJgAASCB9fjVNKBRSbm6unnjiCU2cOFHTp0/X3XffrYqKim7XWbRokZqbm8PTgQMH+rqYAADAkpgGsObk5Cg9PV1NTU0R85uamuTz+bpcJy8vTwMGDFB6enp43kUXXSS/36/29nZlZmZ2WsftdsvtdsdSNAAAkKBiahnJzMzUxIkTVVVVFZ4XCoVUVVWloqKiLteZOnWq3nvvPYVCofC8vXv3Ki8vr8sgAgAAUkvM3TRlZWVau3atnnzySe3Zs0dz585Va2urSktLJUmzZs3SokWLwsvPnTtXx44d0/z587V371799a9/1fLlyzVv3jznPgUAAEhYMd9nZPr06Tpy5IiWLFkiv9+v8ePHq7KyMjyotaGhQWlpX2Sc/Px8/e1vf9Odd96piy++WMOHD9f8+fO1YMEC5z4FAABIWDHfZ8QG7jMCAEDi6ZP7jAAAADiNMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCqR2Fk9erVGjFihLKyslRYWKiamppul/3DH/4gl8sVMWVlZfW4wAAAILnEHEY2bdqksrIyLV26VHV1dRo3bpymTZumw4cPd7tOdna2Ghsbw9P+/ft7VWgAAJA8Yg4jK1eu1Jw5c1RaWqqCggJVVFRo4MCBWr9+fbfruFwu+Xy+8OT1entVaAAAkDxiCiPt7e2qra1VcXHxFxtIS1NxcbGqq6u7Xe+TTz7R+eefr/z8fF177bV6++23T/k+bW1tCgQCERMAAEhOMYWRo0ePKhgMdmrZ8Hq98vv9Xa7zjW98Q+vXr9dzzz2nDRs2KBQKacqUKfrPf/7T7fuUl5fL4/GEp/z8/FiKCQAAEkifX01TVFSkWbNmafz48brsssu0efNmnXPOOXr88ce7XWfRokVqbm4OTwcOHOjrYgIAAEsyYlk4JydH6enpampqipjf1NQkn88X1TYGDBigCRMm6L333ut2GbfbLbfbHUvRAABAgoqpZSQzM1MTJ05UVVVVeF4oFFJVVZWKioqi2kYwGNRbb72lvLy82EoKAACSUkwtI5JUVlam2bNna9KkSZo8ebJWrVql1tZWlZaWSpJmzZql4cOHq7y8XJJ077336tvf/ra+9rWv6fjx41qxYoX279+v2267zdlPAgAAElLMYWT69Ok6cuSIlixZIr/fr/Hjx6uysjI8qLWhoUFpaV80uHz88ceaM2eO/H6/zj77bE2cOFGvv/66CgoKnPsUAAAgYbmMMcZ2IU4nEAjI4/GoublZ2dnZtosDAACiEO3xm2fTAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArOpRGFm9erVGjBihrKwsFRYWqqamJqr1Nm7cKJfLpeuuu64nbwsAAJJQzGFk06ZNKisr09KlS1VXV6dx48Zp2rRpOnz48CnX+/DDD/XrX/9a//M//9PjwgIAgOQTcxhZuXKl5syZo9LSUhUUFKiiokIDBw7U+vXru10nGAxq5syZWrZsmS644IJeFRgAACSXmMJIe3u7amtrVVxc/MUG0tJUXFys6urqbte79957lZubq1tvvTWq92lra1MgEIiYAABAcoopjBw9elTBYFBerzdivtfrld/v73Kdbdu2ad26dVq7dm3U71NeXi6PxxOe8vPzYykmAABIIH16NU1LS4tuueUWrV27Vjk5OVGvt2jRIjU3N4enAwcO9GEpAQCATRmxLJyTk6P09HQ1NTVFzG9qapLP5+u0/Pvvv68PP/xQJSUl4XmhUOjkG2dkqL6+XqNGjeq0ntvtltvtjqVoAAAgQcXUMpKZmamJEyeqqqoqPC8UCqmqqkpFRUWdlh89erTeeust7dy5Mzxdc801+s53vqOdO3fS/QIAAGJrGZGksrIyzZ49W5MmTdLkyZO1atUqtba2qrS0VJI0a9YsDR8+XOXl5crKytKYMWMi1h88eLAkdZoPAABSU8xhZPr06Tpy5IiWLFkiv9+v8ePHq7KyMjyotaGhQWlp3NgVAABEx2WMMbYLcTqBQEAej0fNzc3Kzs62XRwAABCFaI/fNGEAAACrCCMAAMAqwggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACrCCMAAMAqwggAALCKMAIAAKzKsF0AAABgRzBkVLPvmA63nFDuoCxNHjlE6Wmufi8HYQQAgBRUuatRy7bsVmPzifC8PE+WlpYU6Koxef1aFrppAABIMZW7GjV3Q11EEJEkf/MJzd1Qp8pdjf1aHsIIAAApJBgyWrZlt0wXr3XMW7Zlt4KhrpboG4QRAABSSM2+Y51aRL7MSGpsPqGafcf6rUyEEQAAUsjhlu6DSE+WcwJhBACAFJI7KMvR5ZxAGAEAIIVMHjlEeZ4sdXcBr0snr6qZPHJIv5WJMAIAQApJT3NpaUmBJHUKJB3/X1pS0K/3GyGMAACQYq4ak6c1N18inyeyK8bnydKamy/p9/uMcNMzAABS0FVj8nRlgY87sAIAAHvS01wqGjXUdjHopgEAAHYRRgAAgFWEEQAAYBVhBAAAWEUYAQAAVhFGAACAVYQRAABgFWEEAABYRRgBAABWJcQdWI0xkqRAIGC5JAAAIFodx+2O43h3EiKMtLS0SJLy8/MtlwQAAMSqpaVFHo+n29dd5nRxJQ6EQiEdOnRIgwYNksvl3AN8AoGA8vPzdeDAAWVnZzu2XfQt6i0xUW+JiXpLTPFSb8YYtbS0aNiwYUpL635kSEK0jKSlpencc8/ts+1nZ2fzR5aAqLfERL0lJuotMcVDvZ2qRaQDA1gBAIBVhBEAAGBVSocRt9utpUuXyu122y4KYkC9JSbqLTFRb4kp0eotIQawAgCA5JXSLSMAAMA+wggAALCKMAIAAKwijAAAAKtSLow88MADcrlcuuOOO8LzTpw4oXnz5mno0KE666yz9MMf/lBNTU32CglJ0sGDB3XzzTdr6NChOuOMMzR27Fi98cYb4deNMVqyZIny8vJ0xhlnqLi4WO+++67FEiMYDGrx4sUaOXKkzjjjDI0aNUr33XdfxHMpqLf48Nprr6mkpETDhg2Ty+XSX/7yl4jXo6mnY8eOaebMmcrOztbgwYN166236pNPPunHT5F6TlVvn3/+uRYsWKCxY8fqzDPP1LBhwzRr1iwdOnQoYhvxWG8pFUZ27Nihxx9/XBdffHHE/DvvvFNbtmzRM888o1dffVWHDh3S9ddfb6mUkKSPP/5YU6dO1YABA/TSSy9p9+7devjhh3X22WeHl3nooYf0yCOPqKKiQtu3b9eZZ56padOm6cSJExZLntoefPBBrVmzRo899pj27NmjBx98UA899JAeffTR8DLUW3xobW3VuHHjtHr16i5fj6aeZs6cqbfffltbt27VCy+8oNdee0233357f32ElHSqevv0009VV1enxYsXq66uTps3b1Z9fb2uueaaiOXist5MimhpaTEXXnih2bp1q7nsssvM/PnzjTHGHD9+3AwYMMA888wz4WX37NljJJnq6mpLpcWCBQvMpZde2u3roVDI+Hw+s2LFivC848ePG7fbbf74xz/2RxHRhauvvtr89Kc/jZh3/fXXm5kzZxpjqLd4Jcn8+c9/Dv8/mnravXu3kWR27NgRXuall14yLpfLHDx4sN/Knsq+Wm9dqampMZLM/v37jTHxW28p0zIyb948XX311SouLo6YX1tbq88//zxi/ujRo3Xeeeepurq6v4uJ/+/555/XpEmTdMMNNyg3N1cTJkzQ2rVrw6/v27dPfr8/ot48Ho8KCwupN4umTJmiqqoq7d27V5L0r3/9S9u2bdP3vvc9SdRbooimnqqrqzV48GBNmjQpvExxcbHS0tK0ffv2fi8zutbc3CyXy6XBgwdLit96S4gH5fXWxo0bVVdXpx07dnR6ze/3KzMzM1xRHbxer/x+fz+VEF/1wQcfaM2aNSorK9Ndd92lHTt26Fe/+pUyMzM1e/bscN14vd6I9ag3uxYuXKhAIKDRo0crPT1dwWBQ999/v2bOnClJ1FuCiKae/H6/cnNzI17PyMjQkCFDqMs4ceLECS1YsEAzZswIPywvXust6cPIgQMHNH/+fG3dulVZWVm2i4MohUIhTZo0ScuXL5ckTZgwQbt27VJFRYVmz55tuXTozp/+9Cc99dRTevrpp/XNb35TO3fu1B133KFhw4ZRb0A/+vzzz/XjH/9YxhitWbPGdnFOK+m7aWpra3X48GFdcsklysjIUEZGhl599VU98sgjysjIkNfrVXt7u44fPx6xXlNTk3w+n51CQ3l5eSooKIiYd9FFF6mhoUGSwnXz1aueqDe7fvOb32jhwoW68cYbNXbsWN1yyy268847VV5eLol6SxTR1JPP59Phw4cjXv/vf/+rY8eOUZeWdQSR/fv3a+vWreFWESl+6y3pw8gVV1yht956Szt37gxPkyZN0syZM8P/HjBggKqqqsLr1NfXq6GhQUVFRRZLntqmTp2q+vr6iHl79+7V+eefL0kaOXKkfD5fRL0FAgFt376derPo008/VVpa5G4lPT1doVBIEvWWKKKpp6KiIh0/fly1tbXhZV5++WWFQiEVFhb2e5lxUkcQeffdd/WPf/xDQ4cOjXg9buvN2tBZi758NY0xxvzsZz8z5513nnn55ZfNG2+8YYqKikxRUZG9AsLU1NSYjIwMc//995t3333XPPXUU2bgwIFmw4YN4WUeeOABM3jwYPPcc8+Zf//73+baa681I0eONJ999pnFkqe22bNnm+HDh5sXXnjB7Nu3z2zevNnk5OSY3/72t+FlqLf40NLSYt58803z5ptvGklm5cqV5s033wxfdRFNPV111VVmwoQJZvv27Wbbtm3mwgsvNDNmzLD1kVLCqeqtvb3dXHPNNebcc881O3fuNI2NjeGpra0tvI14rDfCiDHms88+Mz//+c/N2WefbQYOHGh+8IMfmMbGRnsFhDHGmC1btpgxY8YYt9ttRo8ebZ544omI10OhkFm8eLHxer3G7XabK664wtTX11sqLYwxJhAImPnz55vzzjvPZGVlmQsuuMDcfffdETtC6i0+vPLKK0ZSp2n27NnGmOjq6aOPPjIzZswwZ511lsnOzjalpaWmpaXFwqdJHaeqt3379nX5miTzyiuvhLcRj/XmMuZLt0YEAADoZ0k/ZgQAAMQ3wggAALCKMAIAAKwijAAAAKsIIwAAwCrCCAAAsIowAgAArCKMAAAAqwgjAADAKsIIAACwijACAACsIowAAACr/h+0rgMIBJY/IAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Cut our tmax range into 25 bins\n",
    "tmax_bins = pd.cut(data[\"tmax\"], 25)\n",
    "\n",
    "# Calculate the average ratio between tmax_tomorrow and tmax in each bin\n",
    "ratios = (data[\"tmax_tomorrow\"] - 11.99 )/ data[\"tmax\"]\n",
    "binned_ratio = ratios.groupby(tmax_bins).mean()\n",
    "\n",
    "# Calculate the average tmax in each bin\n",
    "binned_tmax = data[\"tmax\"].groupby(tmax_bins).mean()\n",
    "\n",
    "# Graph the tmax values versus the ratios\n",
    "plt.scatter(binned_tmax, binned_ratio)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Linear regression can't capture this kind of nonlinearity properly, but neural networks can!\n",
    "\n",
    "Neural networks add to linear regression in three important ways:\n",
    "\n",
    "- A nonlinear transformation on top of the linear transformation\n",
    "- Multiple layers, which can capture interactions between features\n",
    "- Multiple hidden units, which each have slightly different linear and nonlinear transformations\n",
    "\n",
    "## Activation Functions\n",
    "\n",
    "Let's discuss each of these concepts separately.  First, nonlinear transformations, which are called activation functions.  The most common activation function used in neural networks is called a rectified linear unit, or **relu**.  Conceptually, relu is pretty straightforward.  Any value below zero is set to zero, and any value above zero is passed through as normal.\n",
    "\n",
    "All of our temperature values are above zero, but let's generate some new temperatures to visualize what relu does."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x144215090>]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Generate a range of predictions between -50 and 50.\n",
    "temps = np.arange(-50,50)\n",
    "\n",
    "# Predict tmax_tomorrow given each of our input temps\n",
    "plt.plot(temps, np.maximum(0, prediction(temps)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can see that any predictions below 0 are set to 0.  This creates a nonlinear relationship between the input and the prediction.  In this example, if $w_{1}x_{1} + b$ is less than `0`, then the output prediction will be `0`.  If $w_{1}x_{1} + b$ is greater than `0`, then the prediction will be $w_{1}x_{1} + b$.\n",
    "\n",
    "This means that the prediction is no longer linearly related to the input.\n",
    "\n",
    "The equation for this looks like $\\hat{y}=relu(w_{1}x_{1} + b)$.\n",
    "\n",
    "## Multiple Layers\n",
    "\n",
    "Of course, if all we did was add relu, our error would increase a lot!  This is because we'd be making the same prediction for any temperature less than 0.  To fix this, we use multiple layers in our neural network.\n",
    "\n",
    "A neural network with two layers would have the equation $\\hat{y}=w_{2}relu(w_{1}x_{1} + b) + b_{2}$.\n",
    "\n",
    "We won't use an activation function on our output layer - this is the layer that we'll use in our predictions, so we need to not modify the value of the prediction.  This way, we can use a nonlinearity in our network, while still outputting a full range of predictions.\n",
    "\n",
    "You might notice that this doesn't fully solve the problem, though.  If our first layer $relu(w_{1}x_{1} + b)$ return `0`, then multiplying by $w_{2}$ will still result in `0`.  We'd only be adding in $b_{2}$ to generate our output.\n",
    "\n",
    "Here's a concrete example, with $w_{2}$ set to `.5`, and $b_{2}$ set to `10`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0, 40.0)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Generate a range of predictions between -50 and 50.\n",
    "temps = np.arange(-50,50)\n",
    "\n",
    "# Predict tmax_tomorrow given each of our input temps\n",
    "# Apply prediction twice to simulate 2 network layers\n",
    "layer1 = np.maximum(0, prediction(temps))\n",
    "layer2 = prediction(layer1, .5, 10)\n",
    "plt.plot(temps, layer2)\n",
    "\n",
    "# Set the y axis of the plot to start at 0\n",
    "plt.ylim((0,40))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see above, our predictions that are below zero have had $b_{2}$ of `10` added to them, but they're still all the same.  This is because if the output of `layer1` was `0`, then multiplying by $w_{2}$ still results in `0`.  So if the output of `layer1` is `0`, then `layer2` can only add in $b_{2}$, which is `10`.\n",
    "\n",
    "This is a problem if we want to make accurate predictions - if `tmax` is below `0`, it's highly unlikely that `tmax_tomorrow` will always be `10`.\n",
    "\n",
    "## Multiple Units\n",
    "\n",
    "We can solve this by adding multiple units at each layer.  This will basically be running linear regression multiple times, with different weights and biases.\n",
    "\n",
    "For example, we can run linear regression twice, with slightly different weights and biases."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1442f6e90>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot our first regression line, with w1 of .82, and b of 11.99\n",
    "plt.plot(temps, np.maximum(0, prediction(temps)))\n",
    "\n",
    "# Plot our second regression line, with w1 of .1, and b of 10\n",
    "plt.plot(temps, np.maximum(0, prediction(temps, .1, 10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Above, we plotted two lines.  The first line is the output of the first unit in the first layer of the neural network, and the second line is the output of the second unit in the first layer.\n",
    "\n",
    "As you can see, the second unit stays positive across the range of the input temperatures, and thus can pass temperature information to the next layer.  So we maintain a nonlinear relationship between `tmax` and the output while not just passing `0` to the next layer for all temperatures below `0`.\n",
    "\n",
    "We can then pass the output of both units into the second layer of the network to get a prediction.\n",
    "\n",
    "Let's take a quick look at a diagram of this neural network:\n",
    "\n",
    "![2 layer network](images/dense/2layer_network.svg)\n",
    "\n",
    "Then we can code this network, where $w_{1}$ is `.82`, $w_{2}$ is `.1`, $w_{3}$ is `.5`, $w_{4}$ is `.2`, $b_{1}$ is `11.99`, $b_{2}$ is `10`, and $b_{3}$ is `5`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.0, 40.0)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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BVq9fNx9991asWKFdu/erS+//FJXX321/P39df3117f2SwEAAC/U6qdd9u7dq+uvv16HDh1S586ddcEFF2j16tXq3Llza78UAADwQq1ePhYvXtzamwQAAD6Ee7sAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACPonwAAACParPyMXv2bPXs2VPBwcEaOnSovv7667Z6KQAA4EXapHy89tprmjFjhh588EGtWbNGAwcO1KhRo1RWVtYWLwcAALyIxTAMo7U3OnToUKWmpurZZ5+VJLndbtntdk2dOlX33Xdfo3WdTqecTmfDdEVFhRISElRcXKzIyMjWjgYAANqAw+GQ3W5XeXm5bDbbb64b0NovXltbq8LCQmVnZzfM8/Pz04gRI7Rq1aoT1s/JydFDDz10wny73d7a0QAAQBurrKz0fPk4ePCgXC6XYmNjG82PjY1VUVHRCetnZ2drxowZDdNut1uHDx9Wp06dZLFYWjue1/m5SXIkyDPY357DvvYc9rXndOR9bRiGKisrFR8ff8p1W718NJXVapXVam00Lyoqypww7VhkZGSH+0E2E/vbc9jXnsO+9pyOuq9PdcTjZ61+wWlMTIz8/f1VWlraaH5paani4uJa++UAAICXafXyERQUpOTkZC1fvrxhntvt1vLly5Went7aLwcAALxMm5x2mTFjhiZMmKCUlBSlpaXpySefVFVVlTIzM9vi5Xya1WrVgw8+eMKpKbQN9rfnsK89h33tOezr09MmQ20l6dlnn9Vjjz2mkpISDRo0SE8//bSGDh3aFi8FAAC8SJuVDwAAgJPh3i4AAMCjKB8AAMCjKB8AAMCjKB8AAMCjKB9ewOl0atCgQbJYLFq3bl2jZRs2bNDvf/97BQcHy26369FHHzUnpBfbvXu3Jk6cqF69eikkJESJiYl68MEHVVtb22g99nXrmT17tnr27Kng4GANHTpUX3/9tdmRvF5OTo5SU1MVERGhLl266KqrrtLWrVsbrVNTU6OsrCx16tRJ4eHhGjdu3AkfCImmmzVrliwWi6ZNm9Ywj3392ygfXuCee+456WflOxwOjRw5Uj169FBhYaEee+wxzZw5Uy+88IIJKb1XUVGR3G635s6dq82bN+uJJ57Q888/r7/+9a8N67CvW89rr72mGTNm6MEHH9SaNWs0cOBAjRo1SmVlZWZH82orVqxQVlaWVq9erY8++kh1dXUaOXKkqqqqGtaZPn263n33XS1ZskQrVqzQ/v37NXbsWBNTe7/8/HzNnTtXAwYMaDSffX0KBtq1//u//zOSkpKMzZs3G5KMtWvXNix77rnnjDPOOMNwOp0N8+69917jrLPOMiGpb3n00UeNXr16NUyzr1tPWlqakZWV1TDtcrmM+Ph4Iycnx8RUvqesrMyQZKxYscIwDMMoLy83AgMDjSVLljSs88033xiSjFWrVpkV06tVVlYaffr0MT766CPjP/7jP4w777zTMAz29engyEc7VlpaqkmTJmnhwoUKDQ09YfmqVas0bNgwBQUFNcwbNWqUtm7dqh9++MGTUX1ORUWFoqOjG6bZ162jtrZWhYWFGjFiRMM8Pz8/jRgxQqtWrTIxme+pqKiQpIaf48LCQtXV1TXa90lJSUpISGDfN1NWVpYuu+yyRvtUYl+fDspHO2UYhjIyMjRlyhSlpKScdJ2SkhLFxsY2mvfzdElJSZtn9FXbt2/XM888o9tuu61hHvu6dRw8eFAul+uk+5L92HrcbremTZum3/3ud+rfv7+kH39Og4KCTrhrOPu+eRYvXqw1a9YoJyfnhGXs61OjfHjYfffdJ4vF8puPoqIiPfPMM6qsrFR2drbZkb3W6e7rY+3bt0+jR4/WH//4R02aNMmk5EDLZGVladOmTVq8eLHZUXxScXGx7rzzTr3yyisKDg42O45XapMby+HX3XXXXcrIyPjNdXr37q1PPvlEq1atOuHmRCkpKbrxxhs1f/58xcXFnXD19M/TcXFxrZrbG53uvv7Z/v37ddFFF+n8888/4UJS9nXriImJkb+//0n3Jfuxddxxxx167733tHLlSnXv3r1hflxcnGpra1VeXt7oL3L2fdMVFhaqrKxMQ4YMaZjncrm0cuVKPfvss1q2bBn7+lTMvugEJ/fdd98ZGzdubHgsW7bMkGS88cYbRnFxsWEYv1wEWVtb2/C87OxsLoJshr179xp9+vQxrrvuOqO+vv6E5ezr1pOWlmbccccdDdMul8vo1q0bF5y2kNvtNrKysoz4+Hjj22+/PWH5zxdBvvHGGw3zioqKuAiyGRwOR6Pfzxs3bjRSUlKMm266ydi4cSP7+jRQPrzErl27ThjtUl5ebsTGxho333yzsWnTJmPx4sVGaGioMXfuXPOCeqG9e/caZ555pjF8+HBj7969xoEDBxoeP2Nft57FixcbVqvVyMvLM7Zs2WJMnjzZiIqKMkpKSsyO5tVuv/12w2azGZ999lmjn+Hq6uqGdaZMmWIkJCQYn3zyiVFQUGCkp6cb6enpJqb2HceOdjEM9vWpUD68xMnKh2EYxvr1640LLrjAsFqtRrdu3YxZs2aZE9CL5ebmGpJO+jgW+7r1PPPMM0ZCQoIRFBRkpKWlGatXrzY7ktf7tZ/h3NzchnWOHj1q/PnPfzbOOOMMIzQ01Lj66qsblWw03/Hlg3392yyGYRgeP9cDAAA6LEa7AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj6J8AAAAj/r/KuJZR3F31yQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Generate a range of predictions between -50 and 50.\n",
    "temps = np.arange(-50,50)\n",
    "\n",
    "# Predict tmax_tomorrow given each of our input temps\n",
    "# Output from unit 1 of layer 1\n",
    "layer1_unit1 = np.maximum(0, prediction(temps))\n",
    "# Output from unit 2 of layer 1\n",
    "layer1_unit2 = np.maximum(0, prediction(temps, .1, 10))\n",
    "# Output from layer 2 - multiply the outputs of layer 1 unit 1 and layer 1 unit 2 by the respective weights, and add the bias\n",
    "layer2 = prediction(layer1_unit1, .5, 0) + prediction(layer1_unit2, .2, 0) + 5\n",
    "plt.plot(temps, layer2)\n",
    "\n",
    "# Set the y axis of the plot to start at 0\n",
    "plt.ylim((0,40))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This looks a lot better!  We now see that the network doesn't make the exact same prediction for all input temperatures below a certain value.  This is because the second layer was able to look at multiple inputs, and the output was only zeroed out in one of them.\n",
    "\n",
    "This still enabled us to have a nonlinear relationship between the input and the output, but it also preserves the input signal - we still have some information about the original `tmax` in the second layer.\n",
    "\n",
    "## Calculating Layer Outputs\n",
    "\n",
    "In practice, we can use dozens or hundreds of layers and units in each layer.  It can get annoying to have to write out $w_{1}$, $w_{2}$, and so on.  To both make it easier to show the weights and biases, and faster to execute the network, we store our weights and biases in matrices.\n",
    "\n",
    "![layer 1 weights](images/dense/layer1_weights.svg)\n",
    "\n",
    "When weights are in matrices, we use matrix multiplication to multiply them with the inputs. Matrix multiplication works by multiplying each element of each row of the first matrix by each column of the second matrix, then adding them together:\n",
    "\n",
    "![layer 1 weights](images/dense/matrix_mult.gif)\n",
    "\n",
    "We can then add the biases to each row of the output.  Here is the full process of multiplying two input `tmax` values `80` and `90` by the weights and adding the bias.  Since there are two units in layer 1, we end up with two outputs for each input.  Each row in the output corresponds to a row in the input.\n",
    "\n",
    "![layer 1 weights](images/dense/layer1_mult.svg)\n",
    "\n",
    "The shapes of the matrices matter a lot in matrix multiplication.  The shape is the number of rows in a matrix by the number of columns, like `2x1`.  We can only multiply matrix A with matrix B if the number of columns in matrix A equals the number of rows in matrix B.\n",
    "\n",
    "In the diagram above, we take a `2x1` matrix of `tmax` values, multiply by a `1x2` matrix of weights, then end up with a `2x2` matrix.  We then add a `1x2` matrix to this (which adds the bias values to each row).  The output is a `2x2` matrix.\n",
    "\n",
    "We can implement our matrix multiplication in code.  We'll use a library called `tsensor` so you can see how the matrix shapes change:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"268.738369pt\" height=\"53.27163pt\" viewBox=\"0 0 268.738369 53.27163\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:10.631472</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.27163  L 268.738369 53.27163  L 268.738369 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 24.92865 45.483912  L 47.77875 45.483912  L 47.77875 22.781232  L 24.92865 22.781232  z \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 99.02826 45.483912  L 104.25114 45.483912  L 104.25114 22.781232  L 99.02826 22.781232  z \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: #7fa4d3; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 158.76495 27.970416  L 181.61505 27.970416  L 181.61505 22.781232  L 158.76495 22.781232  z \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 233.84385 27.970416  L 256.69395 27.970416  L 256.69395 22.781232  L 233.84385 22.781232  z \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 12.860733  L 66.38526 12.860733  \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 84.66534 12.860733  L 118.61406 12.860733  \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 136.89414 12.860733  L 203.48586 12.860733  \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_4\">\n",
       "    <path d=\"M 221.76594 12.860733  L 268.77186 12.860733  \" clip-path=\"url(#p71408f7c4f)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-31\" d=\"M 3116 0  L 550 0  L 550 506  L 1600 506  L 1600 3488  L 622 2956  L 422 3419  L 1722 4103  L 2203 4103  L 2203 506  L 3116 506  L 3116 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6f\" d=\"M 3231 1594  Q 3231 1228 3128 923  Q 3025 619 2831 401  Q 2638 184 2359 64  Q 2081 -56 1728 -56  Q 1391 -56 1123 48  Q 856 153 670 356  Q 484 559 386 859  Q 288 1159 288 1550  Q 288 1916 391 2217  Q 494 2519 687 2736  Q 881 2953 1159 3073  Q 1438 3194 1791 3194  Q 2128 3194 2395 3089  Q 2663 2984 2848 2782  Q 3034 2581 3132 2281  Q 3231 1981 3231 1594  z M 2675 1569  Q 2675 1859 2611 2076  Q 2547 2294 2428 2439  Q 2309 2584 2139 2657  Q 1969 2731 1759 2731  Q 1516 2731 1342 2636  Q 1169 2541 1058 2381  Q 947 2222 895 2011  Q 844 1800 844 1569  Q 844 1278 908 1059  Q 972 841 1090 695  Q 1209 550 1378 476  Q 1547 403 1759 403  Q 2003 403 2176 498  Q 2350 594 2461 753  Q 2572 913 2623 1123  Q 2675 1334 2675 1569  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-75\" d=\"M 3022 0  L 2534 0  L 2516 506  Q 2375 344 2248 236  Q 2122 128 1997 62  Q 1872 -3 1745 -29  Q 1619 -56 1478 -56  Q 994 -56 747 228  Q 500 513 500 1088  L 500 3138  L 1044 3138  L 1044 1131  Q 1044 409 1588 409  Q 1688 409 1783 439  Q 1878 469 1983 542  Q 2088 616 2208 741  Q 2328 866 2478 1056  L 2478 3138  L 3022 3138  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-70\" d=\"M 3181 1625  Q 3181 1206 3064 893  Q 2947 581 2740 375  Q 2534 169 2253 65  Q 1972 -38 1644 -38  Q 1494 -38 1345 -22  Q 1197 -6 1044 31  L 1044 -1281  L 500 -1281  L 500 3138  L 984 3138  L 1019 2613  Q 1253 2934 1518 3064  Q 1784 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1194 475 1359 439  Q 1525 403 1684 403  Q 2125 403 2375 701  Q 2625 1000 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- @ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-40\" d=\"M 2438 1275  Q 2409 1075 2406 944  Q 2403 813 2423 738  Q 2444 663 2487 633  Q 2531 603 2597 603  Q 2684 603 2762 695  Q 2841 788 2902 980  Q 2963 1172 2998 1465  Q 3034 1759 3034 2163  Q 3034 2613 2978 2966  Q 2922 3319 2800 3566  Q 2678 3813 2483 3942  Q 2288 4072 2009 4072  Q 1797 4072 1598 3964  Q 1400 3856 1229 3661  Q 1059 3466 920 3192  Q 781 2919 682 2587  Q 584 2256 529 1875  Q 475 1494 475 1081  Q 475 75 778 -420  Q 1081 -916 1631 -916  Q 1909 -916 2150 -852  Q 2391 -788 2650 -659  L 2650 -1063  Q 2394 -1181 2137 -1240  Q 1881 -1300 1600 -1300  Q 803 -1300 420 -703  Q 38 -106 31 1075  Q 28 1547 93 1980  Q 159 2413 282 2788  Q 406 3163 582 3470  Q 759 3778 982 3995  Q 1206 4213 1468 4333  Q 1731 4453 2028 4453  Q 2400 4453 2673 4301  Q 2947 4150 3125 3864  Q 3303 3578 3389 3162  Q 3475 2747 3475 2216  Q 3472 1678 3405 1295  Q 3338 913 3216 669  Q 3094 425 2920 311  Q 2747 197 2534 197  Q 2291 197 2172 322  Q 2053 447 2053 659  Q 1934 419 1796 308  Q 1659 197 1466 197  Q 1172 197 1025 417  Q 878 638 878 1113  Q 878 1284 898 1481  Q 919 1678 967 1876  Q 1016 2075 1094 2258  Q 1172 2441 1286 2580  Q 1400 2719 1556 2803  Q 1713 2888 1913 2888  Q 2031 2888 2134 2859  Q 2238 2831 2284 2803  L 2688 2900  L 2438 1275  z M 2119 2388  Q 2091 2425 2033 2454  Q 1975 2484 1888 2484  Q 1794 2484 1719 2418  Q 1644 2353 1586 2243  Q 1528 2134 1489 1995  Q 1450 1856 1423 1709  Q 1397 1563 1386 1420  Q 1375 1278 1375 1166  Q 1375 866 1412 734  Q 1450 603 1556 603  Q 1594 603 1631 618  Q 1669 634 1711 679  Q 1753 725 1803 806  Q 1853 888 1913 1019  L 2119 2388  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-40\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-77\" d=\"M 3406 3138  L 2950 0  L 2291 0  L 1838 1313  L 1747 1631  L 1644 1294  L 1209 0  L 569 0  L 116 3138  L 647 3138  L 909 1006  L 966 531  L 1100 947  L 1556 2356  L 1947 2356  L 2438 966  L 2578 550  L 2625 991  L 2869 3138  L 3406 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- h -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-68\" d=\"M 3022 0  L 2478 0  L 2478 2003  Q 2478 2366 2342 2545  Q 2206 2725 1953 2725  Q 1844 2725 1748 2695  Q 1653 2666 1550 2592  Q 1447 2519 1325 2394  Q 1203 2269 1044 2081  L 1044 0  L 500 0  L 500 4416  L 1044 4416  L 1044 3138  L 1025 2644  Q 1153 2797 1276 2901  Q 1400 3006 1523 3072  Q 1647 3138 1775 3166  Q 1903 3194 2041 3194  Q 2509 3194 2765 2908  Q 3022 2622 3022 2047  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-68\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- + -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2b\" d=\"M 3256 1466  L 2028 1466  L 2028 191  L 1491 191  L 1491 1466  L 263 1466  L 263 1941  L 1491 1941  L 1491 3206  L 2028 3206  L 2028 1941  L 3256 1941  L 3256 1466  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2b\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- b -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-62\" d=\"M 3181 1625  Q 3181 1234 3073 926  Q 2966 619 2767 405  Q 2569 191 2284 76  Q 2000 -38 1644 -38  Q 1366 -38 1075 15  Q 784 69 500 184  L 500 4416  L 1044 4416  L 1044 3200  L 1019 2619  Q 1253 2934 1520 3064  Q 1788 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1203 475 1368 439  Q 1534 403 1684 403  Q 1872 403 2042 462  Q 2213 522 2342 661  Q 2472 800 2548 1029  Q 2625 1259 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-62\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(23.1399 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-35\" d=\"M 266 1200  L 856 1250  Q 922 819 1161 601  Q 1400 384 1738 384  Q 2144 384 2425 690  Q 2706 997 2706 1503  Q 2706 1984 2436 2262  Q 2166 2541 1728 2541  Q 1456 2541 1237 2417  Q 1019 2294 894 2097  L 366 2166  L 809 4519  L 3088 4519  L 3088 3981  L 1259 3981  L 1013 2750  Q 1425 3038 1878 3038  Q 2478 3038 2890 2622  Q 3303 2206 3303 1553  Q 3303 931 2941 478  Q 2500 -78 1738 -78  Q 1113 -78 717 272  Q 322 622 266 1200  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(33.851278 21.395232) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-32\" d=\"M 3222 541  L 3222 0  L 194 0  Q 188 203 259 391  Q 375 700 629 1000  Q 884 1300 1366 1694  Q 2113 2306 2375 2664  Q 2638 3022 2638 3341  Q 2638 3675 2398 3904  Q 2159 4134 1775 4134  Q 1369 4134 1125 3890  Q 881 3647 878 3216  L 300 3275  Q 359 3922 746 4261  Q 1134 4600 1788 4600  Q 2447 4600 2831 4234  Q 3216 3869 3216 3328  Q 3216 3053 3103 2787  Q 2991 2522 2730 2228  Q 2469 1934 1863 1422  Q 1356 997 1212 845  Q 1069 694 975 541  L 3222 541  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(19.9387 51.88038) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(97.23951 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(99.137278 21.395232) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- &lt;${\\mathit{int64}}$&gt; -->\n",
       "    <g transform=\"translate(88.5147 51.88038) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"DejaVuSans-Oblique-69\" d=\"M 1172 4863  L 1747 4863  L 1606 4134  L 1031 4134  L 1172 4863  z M 909 3500  L 1484 3500  L 800 0  L 225 0  L 909 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6e\" d=\"M 3566 2113  L 3156 0  L 2578 0  L 2988 2091  Q 3016 2238 3031 2350  Q 3047 2463 3047 2528  Q 3047 2791 2881 2937  Q 2716 3084 2419 3084  Q 1956 3084 1622 2776  Q 1288 2469 1184 1941  L 800 0  L 225 0  L 903 3500  L 1478 3500  L 1363 2950  Q 1603 3253 1940 3418  Q 2278 3584 2650 3584  Q 3113 3584 3367 3334  Q 3622 3084 3622 2631  Q 3622 2519 3608 2391  Q 3594 2263 3566 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-69\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6e\" transform=\"translate(86.181641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(149.560547 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(188.769531 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(252.392578 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(316.015625 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(156.9762 27.878245) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(167.687578 21.395232) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(153.775 34.366884) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(232.0551 27.878245) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(242.766478 21.395232) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(228.8539 34.366884) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p71408f7c4f\">\n",
       "   <rect x=\"0\" y=\"4.000116\" width=\"268.119\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([[77.59, 18.  ],\n",
       "       [85.79, 19.  ],\n",
       "       [93.99, 20.  ],\n",
       "       [-4.41,  8.  ],\n",
       "       [ 3.79,  9.  ]])"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import tsensor\n",
    "\n",
    "# Get 5 temperature values\n",
    "input = np.array([[80], [90], [100], [-20], [-10]])\n",
    "\n",
    "# Create the weight matrix, which is 1x2\n",
    "l1_weights = np.array([[.82, .1]])\n",
    "\n",
    "# Create the 1x2 bias matrix\n",
    "l1_bias = np.array([[11.99, 10]])\n",
    "\n",
    "# This is the output of the layer\n",
    "with tsensor.explain() as c:\n",
    "    l1_output = input @ l1_weights + l1_bias\n",
    "\n",
    "l1_output"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see above, the output is a `5x2` matrix, which results from the multiplication and the addition.  We get one output column for each input column.  We then need to apply relu to get the final result:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[77.59, 18.  ],\n",
       "       [85.79, 19.  ],\n",
       "       [93.99, 20.  ],\n",
       "       [ 0.  ,  8.  ],\n",
       "       [ 3.79,  9.  ]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l1_activated = np.maximum(l1_output, 0)\n",
    "l1_activated"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can rewrite our equation for layer 1 to use matrices - $layer_{1}=relu(XW_{1} + B_{1})$.  The capital letters indicate that we are multiplying and adding matrices, not single numbers.  This equation is much simpler to look at, especially when we add in a second layer $\\hat{y}=W_{2}relu(XW_{1} + B_{1}) + B_{2}$.\n",
    "\n",
    "Now, we can apply layer 2 on top of layer 1:\n",
    "\n",
    "![layer 2 multiplied](images/dense/layer2_mult.svg)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"294.852769pt\" height=\"53.27163pt\" viewBox=\"0 0 294.852769 53.27163\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:10.767714</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.27163  L 294.852769 53.27163  L 294.852769 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 23.94936 45.483912  L 29.17224 45.483912  L 29.17224 22.781232  L 23.94936 22.781232  z \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 93.47895 45.483912  L 116.32905 45.483912  L 116.32905 22.781232  L 93.47895 22.781232  z \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 193.69296 45.483912  L 198.91584 45.483912  L 198.91584 22.781232  L 193.69296 22.781232  z \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_5\">\n",
       "    <path d=\"M 266.16042 33.1596  L 276.60618 33.1596  L 276.60618 22.781232  L 266.16042 22.781232  z \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: #7fa4d3; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 12.860733  L 46.79946 12.860733  \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 65.07954 12.860733  L 144.72846 12.860733  \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 163.00854 12.860733  L 229.60026 12.860733  \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_4\">\n",
       "    <path d=\"M 247.88034 12.860733  L 294.88626 12.860733  \" clip-path=\"url(#pee18ea58cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6f\" d=\"M 3231 1594  Q 3231 1228 3128 923  Q 3025 619 2831 401  Q 2638 184 2359 64  Q 2081 -56 1728 -56  Q 1391 -56 1123 48  Q 856 153 670 356  Q 484 559 386 859  Q 288 1159 288 1550  Q 288 1916 391 2217  Q 494 2519 687 2736  Q 881 2953 1159 3073  Q 1438 3194 1791 3194  Q 2128 3194 2395 3089  Q 2663 2984 2848 2782  Q 3034 2581 3132 2281  Q 3231 1981 3231 1594  z M 2675 1569  Q 2675 1859 2611 2076  Q 2547 2294 2428 2439  Q 2309 2584 2139 2657  Q 1969 2731 1759 2731  Q 1516 2731 1342 2636  Q 1169 2541 1058 2381  Q 947 2222 895 2011  Q 844 1800 844 1569  Q 844 1278 908 1059  Q 972 841 1090 695  Q 1209 550 1378 476  Q 1547 403 1759 403  Q 2003 403 2176 498  Q 2350 594 2461 753  Q 2572 913 2623 1123  Q 2675 1334 2675 1569  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-75\" d=\"M 3022 0  L 2534 0  L 2516 506  Q 2375 344 2248 236  Q 2122 128 1997 62  Q 1872 -3 1745 -29  Q 1619 -56 1478 -56  Q 994 -56 747 228  Q 500 513 500 1088  L 500 3138  L 1044 3138  L 1044 1131  Q 1044 409 1588 409  Q 1688 409 1783 439  Q 1878 469 1983 542  Q 2088 616 2208 741  Q 2328 866 2478 1056  L 2478 3138  L 3022 3138  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-70\" d=\"M 3181 1625  Q 3181 1206 3064 893  Q 2947 581 2740 375  Q 2534 169 2253 65  Q 1972 -38 1644 -38  Q 1494 -38 1345 -22  Q 1197 -6 1044 31  L 1044 -1281  L 500 -1281  L 500 3138  L 984 3138  L 1019 2613  Q 1253 2934 1518 3064  Q 1784 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1194 475 1359 439  Q 1525 403 1684 403  Q 2125 403 2375 701  Q 2625 1000 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-31\" d=\"M 3116 0  L 550 0  L 550 506  L 1600 506  L 1600 3488  L 622 2956  L 422 3419  L 1722 4103  L 2203 4103  L 2203 506  L 3116 506  L 3116 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!-- c -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-63\" d=\"M 2938 116  Q 2725 34 2501 -5  Q 2278 -44 2041 -44  Q 1297 -44 895 359  Q 494 763 494 1538  Q 494 1909 609 2212  Q 725 2516 934 2731  Q 1144 2947 1434 3064  Q 1725 3181 2075 3181  Q 2319 3181 2531 3147  Q 2744 3113 2938 3034  L 2938 2516  Q 2734 2622 2523 2670  Q 2313 2719 2088 2719  Q 1878 2719 1692 2639  Q 1506 2559 1365 2409  Q 1225 2259 1144 2043  Q 1063 1828 1063 1556  Q 1063 988 1339 705  Q 1616 422 2106 422  Q 2328 422 2536 472  Q 2744 522 2938 622  L 2938 116  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-63\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!-- v -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-76\" d=\"M 206 3138  L 825 3138  L 1594 1063  L 1759 556  L 1931 1075  L 2694 3138  L 3291 3138  L 2059 0  L 1434 0  L 206 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-76\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- @ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-40\" d=\"M 2438 1275  Q 2409 1075 2406 944  Q 2403 813 2423 738  Q 2444 663 2487 633  Q 2531 603 2597 603  Q 2684 603 2762 695  Q 2841 788 2902 980  Q 2963 1172 2998 1465  Q 3034 1759 3034 2163  Q 3034 2613 2978 2966  Q 2922 3319 2800 3566  Q 2678 3813 2483 3942  Q 2288 4072 2009 4072  Q 1797 4072 1598 3964  Q 1400 3856 1229 3661  Q 1059 3466 920 3192  Q 781 2919 682 2587  Q 584 2256 529 1875  Q 475 1494 475 1081  Q 475 75 778 -420  Q 1081 -916 1631 -916  Q 1909 -916 2150 -852  Q 2391 -788 2650 -659  L 2650 -1063  Q 2394 -1181 2137 -1240  Q 1881 -1300 1600 -1300  Q 803 -1300 420 -703  Q 38 -106 31 1075  Q 28 1547 93 1980  Q 159 2413 282 2788  Q 406 3163 582 3470  Q 759 3778 982 3995  Q 1206 4213 1468 4333  Q 1731 4453 2028 4453  Q 2400 4453 2673 4301  Q 2947 4150 3125 3864  Q 3303 3578 3389 3162  Q 3475 2747 3475 2216  Q 3472 1678 3405 1295  Q 3338 913 3216 669  Q 3094 425 2920 311  Q 2747 197 2534 197  Q 2291 197 2172 322  Q 2053 447 2053 659  Q 1934 419 1796 308  Q 1659 197 1466 197  Q 1172 197 1025 417  Q 878 638 878 1113  Q 878 1284 898 1481  Q 919 1678 967 1876  Q 1016 2075 1094 2258  Q 1172 2441 1286 2580  Q 1400 2719 1556 2803  Q 1713 2888 1913 2888  Q 2031 2888 2134 2859  Q 2238 2831 2284 2803  L 2688 2900  L 2438 1275  z M 2119 2388  Q 2091 2425 2033 2454  Q 1975 2484 1888 2484  Q 1794 2484 1719 2418  Q 1644 2353 1586 2243  Q 1528 2134 1489 1995  Q 1450 1856 1423 1709  Q 1397 1563 1386 1420  Q 1375 1278 1375 1166  Q 1375 866 1412 734  Q 1450 603 1556 603  Q 1594 603 1631 618  Q 1669 634 1711 679  Q 1753 725 1803 806  Q 1853 888 1913 1019  L 2119 2388  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-40\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-32\" d=\"M 3150 0  L 459 0  L 459 488  L 1516 1538  Q 1775 1794 1937 1981  Q 2100 2169 2190 2323  Q 2281 2478 2312 2615  Q 2344 2753 2344 2913  Q 2344 3063 2303 3198  Q 2263 3334 2178 3437  Q 2094 3541 1959 3600  Q 1825 3659 1638 3659  Q 1378 3659 1165 3543  Q 953 3428 775 3244  L 475 3603  Q 706 3847 1007 3994  Q 1309 4141 1709 4141  Q 1981 4141 2204 4059  Q 2428 3978 2590 3825  Q 2753 3672 2842 3450  Q 2931 3228 2931 2950  Q 2931 2716 2868 2516  Q 2806 2316 2679 2117  Q 2553 1919 2361 1706  Q 2169 1494 1906 1241  L 1166 519  L 3150 519  L 3150 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-77\" d=\"M 3406 3138  L 2950 0  L 2291 0  L 1838 1313  L 1747 1631  L 1644 1294  L 1209 0  L 569 0  L 116 3138  L 647 3138  L 909 1006  L 966 531  L 1100 947  L 1556 2356  L 1947 2356  L 2438 966  L 2578 550  L 2625 991  L 2869 3138  L 3406 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- h -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-68\" d=\"M 3022 0  L 2478 0  L 2478 2003  Q 2478 2366 2342 2545  Q 2206 2725 1953 2725  Q 1844 2725 1748 2695  Q 1653 2666 1550 2592  Q 1447 2519 1325 2394  Q 1203 2269 1044 2081  L 1044 0  L 500 0  L 500 4416  L 1044 4416  L 1044 3138  L 1025 2644  Q 1153 2797 1276 2901  Q 1400 3006 1523 3072  Q 1647 3138 1775 3166  Q 1903 3194 2041 3194  Q 2509 3194 2765 2908  Q 3022 2622 3022 2047  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-68\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!-- + -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2b\" d=\"M 3256 1466  L 2028 1466  L 2028 191  L 1491 191  L 1491 1466  L 263 1466  L 263 1941  L 1491 1941  L 1491 3206  L 2028 3206  L 2028 1941  L 3256 1941  L 3256 1466  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2b\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- b -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(268.119 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-62\" d=\"M 3181 1625  Q 3181 1234 3073 926  Q 2966 619 2767 405  Q 2569 191 2284 76  Q 2000 -38 1644 -38  Q 1366 -38 1075 15  Q 784 69 500 184  L 500 4416  L 1044 4416  L 1044 3200  L 1019 2619  Q 1253 2934 1520 3064  Q 1788 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1203 475 1368 439  Q 1534 403 1684 403  Q 1872 403 2042 462  Q 2213 522 2342 661  Q 2472 800 2548 1029  Q 2625 1259 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-62\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(274.6476 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(281.1762 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(287.7048 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(22.16061 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-35\" d=\"M 266 1200  L 856 1250  Q 922 819 1161 601  Q 1400 384 1738 384  Q 2144 384 2425 690  Q 2706 997 2706 1503  Q 2706 1984 2436 2262  Q 2166 2541 1728 2541  Q 1456 2541 1237 2417  Q 1019 2294 894 2097  L 366 2166  L 809 4519  L 3088 4519  L 3088 3981  L 1259 3981  L 1013 2750  Q 1425 3038 1878 3038  Q 2478 3038 2890 2622  Q 3303 2206 3303 1553  Q 3303 931 2941 478  Q 2500 -78 1738 -78  Q 1113 -78 717 272  Q 322 622 266 1200  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(24.058378 21.395232) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(10.1458 51.88038) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(91.6902 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(102.401578 21.395232) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-32\" d=\"M 3222 541  L 3222 0  L 194 0  Q 188 203 259 391  Q 375 700 629 1000  Q 884 1300 1366 1694  Q 2113 2306 2375 2664  Q 2638 3022 2638 3341  Q 2638 3675 2398 3904  Q 2159 4134 1775 4134  Q 1369 4134 1125 3890  Q 881 3647 878 3216  L 300 3275  Q 359 3922 746 4261  Q 1134 4600 1788 4600  Q 2447 4600 2831 4234  Q 3216 3869 3216 3328  Q 3216 3053 3103 2787  Q 2991 2522 2730 2228  Q 2469 1934 1863 1422  Q 1356 997 1212 845  Q 1069 694 975 541  L 3222 541  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(88.489 51.88038) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(191.90421 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(193.801978 21.395232) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_53\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(179.8894 51.88038) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_54\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(264.37167 30.472837) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_55\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(268.880878 21.395232) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_56\">\n",
       "    <!-- &lt;${\\mathit{int64}}$&gt; -->\n",
       "    <g transform=\"translate(258.2583 39.556068) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"DejaVuSans-Oblique-69\" d=\"M 1172 4863  L 1747 4863  L 1606 4134  L 1031 4134  L 1172 4863  z M 909 3500  L 1484 3500  L 800 0  L 225 0  L 909 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6e\" d=\"M 3566 2113  L 3156 0  L 2578 0  L 2988 2091  Q 3016 2238 3031 2350  Q 3047 2463 3047 2528  Q 3047 2791 2881 2937  Q 2716 3084 2419 3084  Q 1956 3084 1622 2776  Q 1288 2469 1184 1941  L 800 0  L 225 0  L 903 3500  L 1478 3500  L 1363 2950  Q 1603 3253 1940 3418  Q 2278 3584 2650 3584  Q 3113 3584 3367 3334  Q 3622 3084 3622 2631  Q 3622 2519 3608 2391  Q 3594 2263 3566 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-69\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6e\" transform=\"translate(86.181641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(149.560547 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(188.769531 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(252.392578 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(316.015625 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"pee18ea58cc\">\n",
       "   <rect x=\"0\" y=\"4.000116\" width=\"294.2334\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([[47.395],\n",
       "       [51.695],\n",
       "       [55.995],\n",
       "       [ 6.6  ],\n",
       "       [ 8.695]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l2_weights = np.array([\n",
    "    [.5],\n",
    "    [.2]\n",
    "])\n",
    "\n",
    "l2_bias = np.array([[5]])\n",
    "\n",
    "# This is the output of the layer\n",
    "with tsensor.explain():\n",
    "    output = l1_activated @ l2_weights + l2_bias\n",
    "\n",
    "output"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We then get a `5x1` output where each row corresponds to a prediction.  One nice way to think about neural network layers is that each layer generates new features in the data.  Our input had 1 feature `tmax`, and our first layer generated `2` new features to describe `tmax`.  Our second layer then compressed those `2` features back into one prediction for `tmax_tomorrow`.\n",
    "\n",
    "One handy rule of thumb is that the number of rows in the weight matrix should equal the number of columns in the input matrix, and the number of columns in the weight matrix should equal the number of columns in the output matrix.  So in layer one, our weight matrix is `1x2` so we go from `1` feature in the input to `2` features in the output.\n",
    "\n",
    "## Calculating W and B\n",
    "\n",
    "We now know how to calculate the outputs of a neural network given $W$ and $B$.  This is called the forward pass of a neural network.\n",
    "\n",
    "Let's learn how to calculate $W$ and $B$ from the data.  We'll be extending our work in the last lesson with gradient descent, which helps us find the $W$ and $B$ values that have the lowest error.  The difference this time is that we'll need to use backpropagation to transmit our loss gradient across multiple layers.\n",
    "\n",
    "First of all, we need to calculate the loss between the actual `tmax_tomorrow` and our predictions.  We can do that using mean squared error, with the formula $\\text{MSE}=(\\hat{y} - y) ^ 2$.\n",
    "\n",
    "Let's say these are our `tmax` and `tmax_tomorrow` values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "tmax = np.array([[80], [90], [100], [-20], [-10]])\n",
    "tmax_tomorrow = np.array([[83], [89], [95], [-22], [-9]])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can then calculate the mean squared error between the actual `tmax_tomorrow` and the `output`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mse(actual, predicted):\n",
    "    return (actual - predicted) ** 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1267.716025],\n",
       "       [1391.663025],\n",
       "       [1521.390025],\n",
       "       [ 817.96    ],\n",
       "       [ 313.113025]])"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mse(tmax_tomorrow, output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now have a mean squared error value corresponding to each of our outputs.  To begin backpropagation, we need to take the derivative of mean squared error, which will tell us which direction we need to adjust our prediction in to lower our loss:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-35.605],\n",
       "       [-37.305],\n",
       "       [-39.005],\n",
       "       [ 28.6  ],\n",
       "       [ 17.695]])"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def mse_grad(actual, predicted):\n",
    "    return predicted - actual\n",
    "\n",
    "mse_grad(tmax_tomorrow, output)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This tells us how to adjust each prediction to get it close to the actual value.\n",
    "\n",
    "## Layer 2 Gradients\n",
    "\n",
    "Now, we can calculate the gradient of our layer 2 parameters relative to our output gradient.  This is like undoing our forward pass, but with our error value as input.  If you need a refresher on this, you should consult the last lesson.\n",
    "\n",
    "We can first get our gradient with respect to our weights by multiplying the loss by the input values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"307.909969pt\" height=\"53.27163pt\" viewBox=\"0 0 307.909969 53.27163\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:10.878082</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.27163  L 307.909969 53.27163  L 307.909969 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 46.79946 45.483912  L 52.02234 45.483912  L 52.02234 22.781232  L 46.79946 22.781232  z \" clip-path=\"url(#p78551b0a21)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 142.44345 45.483912  L 165.29355 45.483912  L 165.29355 22.781232  L 142.44345 22.781232  z \" clip-path=\"url(#p78551b0a21)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 255.71466 45.483912  L 260.93754 45.483912  L 260.93754 22.781232  L 255.71466 22.781232  z \" clip-path=\"url(#p78551b0a21)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 12.860733  L 92.49966 12.860733  \" clip-path=\"url(#p78551b0a21)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 117.30834 12.860733  L 190.42866 12.860733  \" clip-path=\"url(#p78551b0a21)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 208.70874 12.860733  L 307.94346 12.860733  \" clip-path=\"url(#p78551b0a21)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-32\" d=\"M 3150 0  L 459 0  L 459 488  L 1516 1538  Q 1775 1794 1937 1981  Q 2100 2169 2190 2323  Q 2281 2478 2312 2615  Q 2344 2753 2344 2913  Q 2344 3063 2303 3198  Q 2263 3334 2178 3437  Q 2094 3541 1959 3600  Q 1825 3659 1638 3659  Q 1378 3659 1165 3543  Q 953 3428 775 3244  L 475 3603  Q 706 3847 1007 3994  Q 1309 4141 1709 4141  Q 1981 4141 2204 4059  Q 2428 3978 2590 3825  Q 2753 3672 2842 3450  Q 2931 3228 2931 2950  Q 2931 2716 2868 2516  Q 2806 2316 2679 2117  Q 2553 1919 2361 1706  Q 2169 1494 1906 1241  L 1166 519  L 3150 519  L 3150 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-77\" d=\"M 3406 3138  L 2950 0  L 2291 0  L 1838 1313  L 1747 1631  L 1644 1294  L 1209 0  L 569 0  L 116 3138  L 647 3138  L 909 1006  L 966 531  L 1100 947  L 1556 2356  L 1947 2356  L 2438 966  L 2578 550  L 2625 991  L 2869 3138  L 3406 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-72\" d=\"M 628 3138  L 1125 3138  L 1141 2559  Q 1419 2894 1689 3044  Q 1959 3194 2234 3194  Q 2722 3194 2973 2878  Q 3225 2563 3206 1941  L 2656 1941  Q 2666 2353 2536 2539  Q 2406 2725 2156 2725  Q 2047 2725 1936 2686  Q 1825 2647 1708 2561  Q 1591 2475 1459 2340  Q 1328 2206 1178 2016  L 1178 0  L 628 0  L 628 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-31\" d=\"M 3116 0  L 550 0  L 550 506  L 1600 506  L 1600 3488  L 622 2956  L 422 3419  L 1722 4103  L 2203 4103  L 2203 506  L 3116 506  L 3116 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6f\" d=\"M 3231 1594  Q 3231 1228 3128 923  Q 3025 619 2831 401  Q 2638 184 2359 64  Q 2081 -56 1728 -56  Q 1391 -56 1123 48  Q 856 153 670 356  Q 484 559 386 859  Q 288 1159 288 1550  Q 288 1916 391 2217  Q 494 2519 687 2736  Q 881 2953 1159 3073  Q 1438 3194 1791 3194  Q 2128 3194 2395 3089  Q 2663 2984 2848 2782  Q 3034 2581 3132 2281  Q 3231 1981 3231 1594  z M 2675 1569  Q 2675 1859 2611 2076  Q 2547 2294 2428 2439  Q 2309 2584 2139 2657  Q 1969 2731 1759 2731  Q 1516 2731 1342 2636  Q 1169 2541 1058 2381  Q 947 2222 895 2011  Q 844 1800 844 1569  Q 844 1278 908 1059  Q 972 841 1090 695  Q 1209 550 1378 476  Q 1547 403 1759 403  Q 2003 403 2176 498  Q 2350 594 2461 753  Q 2572 913 2623 1123  Q 2675 1334 2675 1569  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-75\" d=\"M 3022 0  L 2534 0  L 2516 506  Q 2375 344 2248 236  Q 2122 128 1997 62  Q 1872 -3 1745 -29  Q 1619 -56 1478 -56  Q 994 -56 747 228  Q 500 513 500 1088  L 500 3138  L 1044 3138  L 1044 1131  Q 1044 409 1588 409  Q 1688 409 1783 439  Q 1878 469 1983 542  Q 2088 616 2208 741  Q 2328 866 2478 1056  L 2478 3138  L 3022 3138  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-70\" d=\"M 3181 1625  Q 3181 1206 3064 893  Q 2947 581 2740 375  Q 2534 169 2253 65  Q 1972 -38 1644 -38  Q 1494 -38 1345 -22  Q 1197 -6 1044 31  L 1044 -1281  L 500 -1281  L 500 3138  L 984 3138  L 1019 2613  Q 1253 2934 1518 3064  Q 1784 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1194 475 1359 439  Q 1525 403 1684 403  Q 2125 403 2375 701  Q 2625 1000 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- . -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2e\" d=\"M 1734 984  Q 1841 984 1936 943  Q 2031 903 2101 831  Q 2172 759 2212 664  Q 2253 569 2253 459  Q 2253 353 2212 259  Q 2172 166 2101 95  Q 2031 25 1936 -15  Q 1841 -56 1734 -56  Q 1625 -56 1531 -15  Q 1438 25 1367 95  Q 1297 166 1256 259  Q 1216 353 1216 459  Q 1216 569 1256 664  Q 1297 759 1367 831  Q 1438 903 1531 943  Q 1625 984 1734 984  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- T -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-54\" d=\"M 3250 3609  L 2041 3609  L 2041 0  L 1478 0  L 1478 3609  L 269 3609  L 269 4084  L 3250 4084  L 3250 3609  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-54\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- @ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 9.045156) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-40\" d=\"M 2438 1275  Q 2409 1075 2406 944  Q 2403 813 2423 738  Q 2444 663 2487 633  Q 2531 603 2597 603  Q 2684 603 2762 695  Q 2841 788 2902 980  Q 2963 1172 2998 1465  Q 3034 1759 3034 2163  Q 3034 2613 2978 2966  Q 2922 3319 2800 3566  Q 2678 3813 2483 3942  Q 2288 4072 2009 4072  Q 1797 4072 1598 3964  Q 1400 3856 1229 3661  Q 1059 3466 920 3192  Q 781 2919 682 2587  Q 584 2256 529 1875  Q 475 1494 475 1081  Q 475 75 778 -420  Q 1081 -916 1631 -916  Q 1909 -916 2150 -852  Q 2391 -788 2650 -659  L 2650 -1063  Q 2394 -1181 2137 -1240  Q 1881 -1300 1600 -1300  Q 803 -1300 420 -703  Q 38 -106 31 1075  Q 28 1547 93 1980  Q 159 2413 282 2788  Q 406 3163 582 3470  Q 759 3778 982 3995  Q 1206 4213 1468 4333  Q 1731 4453 2028 4453  Q 2400 4453 2673 4301  Q 2947 4150 3125 3864  Q 3303 3578 3389 3162  Q 3475 2747 3475 2216  Q 3472 1678 3405 1295  Q 3338 913 3216 669  Q 3094 425 2920 311  Q 2747 197 2534 197  Q 2291 197 2172 322  Q 2053 447 2053 659  Q 1934 419 1796 308  Q 1659 197 1466 197  Q 1172 197 1025 417  Q 878 638 878 1113  Q 878 1284 898 1481  Q 919 1678 967 1876  Q 1016 2075 1094 2258  Q 1172 2441 1286 2580  Q 1400 2719 1556 2803  Q 1713 2888 1913 2888  Q 2031 2888 2134 2859  Q 2238 2831 2284 2803  L 2688 2900  L 2438 1275  z M 2119 2388  Q 2091 2425 2033 2454  Q 1975 2484 1888 2484  Q 1794 2484 1719 2418  Q 1644 2353 1586 2243  Q 1528 2134 1489 1995  Q 1450 1856 1423 1709  Q 1397 1563 1386 1420  Q 1375 1278 1375 1166  Q 1375 866 1412 734  Q 1450 603 1556 603  Q 1594 603 1631 618  Q 1669 634 1711 679  Q 1753 725 1803 806  Q 1853 888 1913 1019  L 2119 2388  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-40\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(268.119 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(274.6476 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(281.1762 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(287.7048 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(294.2334 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(300.762 9.045156) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(45.01071 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-32\" d=\"M 3222 541  L 3222 0  L 194 0  Q 188 203 259 391  Q 375 700 629 1000  Q 884 1300 1366 1694  Q 2113 2306 2375 2664  Q 2638 3022 2638 3341  Q 2638 3675 2398 3904  Q 2159 4134 1775 4134  Q 1369 4134 1125 3890  Q 881 3647 878 3216  L 300 3275  Q 359 3922 746 4261  Q 1134 4600 1788 4600  Q 2447 4600 2831 4234  Q 3216 3869 3216 3328  Q 3216 3053 3103 2787  Q 2991 2522 2730 2228  Q 2469 1934 1863 1422  Q 1356 997 1212 845  Q 1069 694 975 541  L 3222 541  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(46.908478 21.395232) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(32.9959 51.88038) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(140.6547 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(151.366078 21.395232) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-35\" d=\"M 266 1200  L 856 1250  Q 922 819 1161 601  Q 1400 384 1738 384  Q 2144 384 2425 690  Q 2706 997 2706 1503  Q 2706 1984 2436 2262  Q 2166 2541 1728 2541  Q 1456 2541 1237 2417  Q 1019 2294 894 2097  L 366 2166  L 809 4519  L 3088 4519  L 3088 3981  L 1259 3981  L 1013 2750  Q 1425 3038 1878 3038  Q 2478 3038 2890 2622  Q 3303 2206 3303 1553  Q 3303 931 2941 478  Q 2500 -78 1738 -78  Q 1113 -78 717 272  Q 322 622 266 1200  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(137.4535 51.88038) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_53\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(253.92591 36.634993) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_54\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(255.823678 21.395232) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_55\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(241.9111 51.88038) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p78551b0a21\">\n",
       "   <rect x=\"0\" y=\"4.000116\" width=\"307.2906\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([[-9688.1298],\n",
       "       [-1741.73  ]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "output_gradient = mse_grad(tmax_tomorrow, output)\n",
    "\n",
    "with tsensor.explain():\n",
    "    l2_w_gradient =  l1_activated.T @ output_gradient\n",
    "\n",
    "l2_w_gradient"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's discuss why this operation makes sense.  In the forward pass, we multiply each input to layer 2 by a weight to get the output.  Let's use a diagram to visualize this. We'll leave the bias out to make things clearer:\n",
    "\n",
    "![layer 2 backwards](images/dense/layer2_bw.svg)\n",
    "\n",
    "The diagram above shows us which weight values affect which output values in the forward pass.  We want to know whether to increase or decrease our weights.  To do that, we have to look at the outputs connected to those weights, and determine if those outputs should be higher or lower.  This is what the output gradient tells us - which outputs we need to decrease or increase.\n",
    "\n",
    "If we multiply our output gradients by the inputs to the layer, it tells us how much we need to increase or decrease our weights:\n",
    "\n",
    "![layer 2 backwards](images/dense/layer2_grad.svg)\n",
    "\n",
    "Each weight value is multiplied by multiple input values (each weight is applied once per row of input data).  We find all of the input values that were multiplied by a weight, then multiply them by the output gradient.  This tells us how much to adjust the weight.  This is due to the chain rule of partial derivatives, which we covered in the last lesson:\n",
    "\n",
    "$$\\frac{\\partial L}{\\partial W}=\\partial L\\frac{\\partial (XW)}{\\partial W}$$\n",
    "\n",
    "$$\\frac{\\partial L}{\\partial W}=\\partial L * X$$\n",
    "\n",
    "The partial derivative of the loss with respect to $W$ is the same as the partial derivative of the loss with respect to $XW$ times the partial derivative of $W$.\n",
    "\n",
    "For example, let's say the input `tmax` value is `80`, and the weight is `1`.  The output (without a bias) is `80`.  Let's say the `tmax_tomorrow` is `85`.  So the output gradient is `5`.  If we increase the weight by `1`, it will increase the output by `80`.  The weight is scaled by the input `tmax` value.  So we multiply the output gradient by the `tmax` value to calculate the weight gradient.\n",
    "\n",
    "The bias equally affects all outputs.  If we increase the bias by `5`, all of the outputs will also be increased by `5`.  So the bias gradient is the average of all the output gradient values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"327.495769pt\" height=\"53.67788pt\" viewBox=\"0 0 327.495769 53.67788\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:10.955114</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.67788  L 327.495769 53.67788  L 327.495769 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 37.98585 28.376666  L 60.83595 28.376666  L 60.83595 23.187482  L 37.98585 23.187482  z \" clip-path=\"url(#p3cc7cd922a)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 216.54306 45.890162  L 221.76594 45.890162  L 221.76594 23.187482  L 216.54306 23.187482  z \" clip-path=\"url(#p3cc7cd922a)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 13.266983  L 92.49966 13.266983  \" clip-path=\"url(#p3cc7cd922a)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 169.53714 13.266983  L 268.77186 13.266983  \" clip-path=\"url(#p3cc7cd922a)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-32\" d=\"M 3150 0  L 459 0  L 459 488  L 1516 1538  Q 1775 1794 1937 1981  Q 2100 2169 2190 2323  Q 2281 2478 2312 2615  Q 2344 2753 2344 2913  Q 2344 3063 2303 3198  Q 2263 3334 2178 3437  Q 2094 3541 1959 3600  Q 1825 3659 1638 3659  Q 1378 3659 1165 3543  Q 953 3428 775 3244  L 475 3603  Q 706 3847 1007 3994  Q 1309 4141 1709 4141  Q 1981 4141 2204 4059  Q 2428 3978 2590 3825  Q 2753 3672 2842 3450  Q 2931 3228 2931 2950  Q 2931 2716 2868 2516  Q 2806 2316 2679 2117  Q 2553 1919 2361 1706  Q 2169 1494 1906 1241  L 1166 519  L 3150 519  L 3150 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- b -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-62\" d=\"M 3181 1625  Q 3181 1234 3073 926  Q 2966 619 2767 405  Q 2569 191 2284 76  Q 2000 -38 1644 -38  Q 1366 -38 1075 15  Q 784 69 500 184  L 500 4416  L 1044 4416  L 1044 3200  L 1019 2619  Q 1253 2934 1520 3064  Q 1788 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1203 475 1368 439  Q 1534 403 1684 403  Q 1872 403 2042 462  Q 2213 522 2342 661  Q 2472 800 2548 1029  Q 2625 1259 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-62\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-72\" d=\"M 628 3138  L 1125 3138  L 1141 2559  Q 1419 2894 1689 3044  Q 1959 3194 2234 3194  Q 2722 3194 2973 2878  Q 3225 2563 3206 1941  L 2656 1941  Q 2666 2353 2536 2539  Q 2406 2725 2156 2725  Q 2047 2725 1936 2686  Q 1825 2647 1708 2561  Q 1591 2475 1459 2340  Q 1328 2206 1178 2016  L 1178 0  L 628 0  L 628 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-70\" d=\"M 3181 1625  Q 3181 1206 3064 893  Q 2947 581 2740 375  Q 2534 169 2253 65  Q 1972 -38 1644 -38  Q 1494 -38 1345 -22  Q 1197 -6 1044 31  L 1044 -1281  L 500 -1281  L 500 3138  L 984 3138  L 1019 2613  Q 1253 2934 1518 3064  Q 1784 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1194 475 1359 439  Q 1525 403 1684 403  Q 2125 403 2375 701  Q 2625 1000 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!-- . -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2e\" d=\"M 1734 984  Q 1841 984 1936 943  Q 2031 903 2101 831  Q 2172 759 2212 664  Q 2253 569 2253 459  Q 2253 353 2212 259  Q 2172 166 2101 95  Q 2031 25 1936 -15  Q 1841 -56 1734 -56  Q 1625 -56 1531 -15  Q 1438 25 1367 95  Q 1297 166 1256 259  Q 1216 353 1216 459  Q 1216 569 1256 664  Q 1297 759 1367 831  Q 1438 903 1531 943  Q 1625 984 1734 984  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- m -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6d\" d=\"M 2738 0  L 2738 2253  Q 2738 2400 2727 2494  Q 2716 2588 2692 2642  Q 2669 2697 2633 2719  Q 2597 2741 2544 2741  Q 2481 2741 2428 2703  Q 2375 2666 2314 2581  Q 2253 2497 2179 2358  Q 2106 2219 2006 2016  L 2006 0  L 1509 0  L 1509 2194  Q 1509 2366 1498 2472  Q 1488 2578 1464 2637  Q 1441 2697 1403 2719  Q 1366 2741 1313 2741  Q 1256 2741 1206 2709  Q 1156 2678 1095 2597  Q 1034 2516 959 2375  Q 884 2234 781 2016  L 781 0  L 281 0  L 281 3138  L 697 3138  L 722 2541  Q 803 2719 879 2844  Q 956 2969 1037 3045  Q 1119 3122 1211 3158  Q 1303 3194 1416 3194  Q 1669 3194 1800 3028  Q 1931 2863 1931 2516  Q 2006 2678 2078 2804  Q 2150 2931 2233 3017  Q 2316 3103 2416 3148  Q 2516 3194 2647 3194  Q 3238 3194 3238 2284  L 3238 0  L 2738 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- ( -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-28\" d=\"M 2378 -1313  Q 938 22 938 1638  Q 938 2016 1014 2392  Q 1091 2769 1261 3147  Q 1431 3525 1711 3903  Q 1991 4281 2391 4653  L 2706 4331  Q 1494 3134 1494 1678  Q 1494 953 1800 284  Q 2106 -384 2706 -978  L 2378 -1313  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-28\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6f\" d=\"M 3231 1594  Q 3231 1228 3128 923  Q 3025 619 2831 401  Q 2638 184 2359 64  Q 2081 -56 1728 -56  Q 1391 -56 1123 48  Q 856 153 670 356  Q 484 559 386 859  Q 288 1159 288 1550  Q 288 1916 391 2217  Q 494 2519 687 2736  Q 881 2953 1159 3073  Q 1438 3194 1791 3194  Q 2128 3194 2395 3089  Q 2663 2984 2848 2782  Q 3034 2581 3132 2281  Q 3231 1981 3231 1594  z M 2675 1569  Q 2675 1859 2611 2076  Q 2547 2294 2428 2439  Q 2309 2584 2139 2657  Q 1969 2731 1759 2731  Q 1516 2731 1342 2636  Q 1169 2541 1058 2381  Q 947 2222 895 2011  Q 844 1800 844 1569  Q 844 1278 908 1059  Q 972 841 1090 695  Q 1209 550 1378 476  Q 1547 403 1759 403  Q 2003 403 2176 498  Q 2350 594 2461 753  Q 2572 913 2623 1123  Q 2675 1334 2675 1569  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-75\" d=\"M 3022 0  L 2534 0  L 2516 506  Q 2375 344 2248 236  Q 2122 128 1997 62  Q 1872 -3 1745 -29  Q 1619 -56 1478 -56  Q 994 -56 747 228  Q 500 513 500 1088  L 500 3138  L 1044 3138  L 1044 1131  Q 1044 409 1588 409  Q 1688 409 1783 439  Q 1878 469 1983 542  Q 2088 616 2208 741  Q 2328 866 2478 1056  L 2478 3138  L 3022 3138  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- , -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(268.119 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2c\" d=\"M 744 -641  Q 903 -647 1053 -612  Q 1203 -578 1317 -511  Q 1431 -444 1500 -344  Q 1569 -244 1569 -116  Q 1569 16 1523 97  Q 1478 178 1422 247  Q 1366 316 1320 394  Q 1275 472 1275 603  Q 1275 669 1300 741  Q 1325 813 1376 872  Q 1428 931 1508 968  Q 1588 1006 1697 1006  Q 1806 1006 1907 961  Q 2009 916 2086 822  Q 2163 728 2208 587  Q 2253 447 2253 256  Q 2253 -3 2158 -242  Q 2063 -481 1873 -665  Q 1684 -850 1401 -959  Q 1119 -1069 744 -1069  L 744 -641  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(274.6476 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(281.1762 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- x -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(287.7048 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-78\" d=\"M 3328 0  L 2606 0  L 1759 1197  L 922 0  L 219 0  L 1434 1575  L 275 3138  L 972 3138  L 1797 1931  L 2606 3138  L 3278 3138  L 2100 1563  L 3328 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-78\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(294.2334 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(300.762 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(307.2906 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- 0 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(313.8192 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-30\" d=\"M 3244 2041  Q 3244 1572 3150 1186  Q 3056 800 2865 523  Q 2675 247 2392 95  Q 2109 -56 1728 -56  Q 1400 -56 1131 67  Q 863 191 672 447  Q 481 703 378 1100  Q 275 1497 275 2041  Q 275 2509 370 2896  Q 466 3284 655 3561  Q 844 3838 1128 3989  Q 1413 4141 1791 4141  Q 2119 4141 2387 4017  Q 2656 3894 2847 3636  Q 3038 3378 3141 2981  Q 3244 2584 3244 2041  z M 2694 2022  Q 2694 2128 2686 2233  Q 2678 2338 2669 2438  L 941 1153  Q 988 991 1059 853  Q 1131 716 1232 617  Q 1334 519 1464 464  Q 1594 409 1759 409  Q 1972 409 2145 512  Q 2319 616 2441 819  Q 2563 1022 2628 1323  Q 2694 1625 2694 2022  z M 825 2059  Q 825 1963 826 1866  Q 828 1769 838 1678  L 2566 2956  Q 2519 3116 2447 3247  Q 2375 3378 2275 3473  Q 2175 3569 2047 3622  Q 1919 3675 1759 3675  Q 1547 3675 1373 3572  Q 1200 3469 1078 3264  Q 956 3059 890 2757  Q 825 2456 825 2059  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- ) -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(320.3478 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-29\" d=\"M 1141 4653  Q 2581 3319 2581 1684  Q 2581 1347 2512 984  Q 2444 622 2278 242  Q 2113 -138 1833 -528  Q 1553 -919 1128 -1313  L 813 -991  Q 1422 -388 1722 268  Q 2022 925 2022 1644  Q 2022 3131 813 4319  L 1141 4653  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-29\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(46.908478 21.801482) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(32.9959 34.68443) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(214.75431 37.041243) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-35\" d=\"M 266 1200  L 856 1250  Q 922 819 1161 601  Q 1400 384 1738 384  Q 2144 384 2425 690  Q 2706 997 2706 1503  Q 2706 1984 2436 2262  Q 2166 2541 1728 2541  Q 1456 2541 1237 2417  Q 1019 2294 894 2097  L 366 2166  L 809 4519  L 3088 4519  L 3088 3981  L 1259 3981  L 1013 2750  Q 1425 3038 1878 3038  Q 2478 3038 2890 2622  Q 3303 2206 3303 1553  Q 3303 931 2941 478  Q 2500 -78 1738 -78  Q 1113 -78 717 272  Q 322 622 266 1200  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_53\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(216.652078 21.801482) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_54\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(202.7395 52.28663) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p3cc7cd922a\">\n",
       "   <rect x=\"0\" y=\"4.406366\" width=\"326.8764\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([-13.124])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with tsensor.explain():\n",
    "    l2_b_gradient =  np.mean(output_gradient, axis=0)\n",
    "\n",
    "l2_b_gradient"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To update our layer 2 weights and biases, we need to subtract the gradient from the $W$ and $B$ values, adjusted by the learning rate.  You may recall that the learning rate prevents us from making updates to the parameters that are too large (which will move us away from the area of lowest error):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.5],\n",
       "       [0.2]])"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Display original layer 2 weights\n",
    "l2_weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"255.681169pt\" height=\"40.872162pt\" viewBox=\"0 0 255.681169 40.872162\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:11.036034</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 40.872162  L 255.681169 40.872162  L 255.681169 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 24.60222 33.084443  L 35.04798 33.084443  L 35.04798 22.706075  L 24.60222 22.706075  z \" clip-path=\"url(#p0dcc11c1d2)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 89.88822 33.084443  L 100.33398 33.084443  L 100.33398 22.706075  L 89.88822 22.706075  z \" clip-path=\"url(#p0dcc11c1d2)\" style=\"fill: #7fa4d3; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 168.55785 27.895259  L 191.40795 27.895259  L 191.40795 22.706075  L 168.55785 22.706075  z \" clip-path=\"url(#p0dcc11c1d2)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 12.785576  L 53.32806 12.785576  \" clip-path=\"url(#p0dcc11c1d2)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 71.60814 12.785576  L 118.61406 12.785576  \" clip-path=\"url(#p0dcc11c1d2)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 136.89414 12.785576  L 223.07166 12.785576  \" clip-path=\"url(#p0dcc11c1d2)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-32\" d=\"M 3150 0  L 459 0  L 459 488  L 1516 1538  Q 1775 1794 1937 1981  Q 2100 2169 2190 2323  Q 2281 2478 2312 2615  Q 2344 2753 2344 2913  Q 2344 3063 2303 3198  Q 2263 3334 2178 3437  Q 2094 3541 1959 3600  Q 1825 3659 1638 3659  Q 1378 3659 1165 3543  Q 953 3428 775 3244  L 475 3603  Q 706 3847 1007 3994  Q 1309 4141 1709 4141  Q 1981 4141 2204 4059  Q 2428 3978 2590 3825  Q 2753 3672 2842 3450  Q 2931 3228 2931 2950  Q 2931 2716 2868 2516  Q 2806 2316 2679 2117  Q 2553 1919 2361 1706  Q 2169 1494 1906 1241  L 1166 519  L 3150 519  L 3150 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- b -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-62\" d=\"M 3181 1625  Q 3181 1234 3073 926  Q 2966 619 2767 405  Q 2569 191 2284 76  Q 2000 -38 1644 -38  Q 1366 -38 1075 15  Q 784 69 500 184  L 500 4416  L 1044 4416  L 1044 3200  L 1019 2619  Q 1253 2934 1520 3064  Q 1788 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1203 475 1368 439  Q 1534 403 1684 403  Q 1872 403 2042 462  Q 2213 522 2342 661  Q 2472 800 2548 1029  Q 2625 1259 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-62\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!-- b -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-62\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- - -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2d\" d=\"M 2694 1447  L 825 1447  L 825 1959  L 2694 1959  L 2694 1447  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!-- b -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-62\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-72\" d=\"M 628 3138  L 1125 3138  L 1141 2559  Q 1419 2894 1689 3044  Q 1959 3194 2234 3194  Q 2722 3194 2973 2878  Q 3225 2563 3206 1941  L 2656 1941  Q 2666 2353 2536 2539  Q 2406 2725 2156 2725  Q 2047 2725 1936 2686  Q 1825 2647 1708 2561  Q 1591 2475 1459 2340  Q 1328 2206 1178 2016  L 1178 0  L 628 0  L 628 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- * -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2a\" d=\"M 3003 2625  L 2791 2253  L 1913 2834  L 1984 1766  L 1538 1766  L 1606 2834  L 709 2253  L 513 2619  L 1472 3091  L 513 3572  L 728 3938  L 1613 3347  L 1538 4416  L 1984 4416  L 1906 3347  L 2791 3944  L 3009 3559  L 2047 3084  L 3003 2625  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2a\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(22.81347 30.397681) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(27.322678 21.320075) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(13.4101 39.480912) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(88.09947 30.397681) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(92.608678 21.320075) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- &lt;${\\mathit{int64}}$&gt; -->\n",
       "    <g transform=\"translate(81.9861 39.480912) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"DejaVuSans-Oblique-69\" d=\"M 1172 4863  L 1747 4863  L 1606 4134  L 1031 4134  L 1172 4863  z M 909 3500  L 1484 3500  L 800 0  L 225 0  L 909 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6e\" d=\"M 3566 2113  L 3156 0  L 2578 0  L 2988 2091  Q 3016 2238 3031 2350  Q 3047 2463 3047 2528  Q 3047 2791 2881 2937  Q 2716 3084 2419 3084  Q 1956 3084 1622 2776  Q 1288 2469 1184 1941  L 800 0  L 225 0  L 903 3500  L 1478 3500  L 1363 2950  Q 1603 3253 1940 3418  Q 2278 3584 2650 3584  Q 3113 3584 3367 3334  Q 3622 3084 3622 2631  Q 3622 2519 3608 2391  Q 3594 2263 3566 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-69\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6e\" transform=\"translate(86.181641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(149.560547 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(188.769531 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(252.392578 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(316.015625 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(177.480478 21.320075) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(163.5679 34.203024) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p0dcc11c1d2\">\n",
       "   <rect x=\"0\" y=\"3.92496\" width=\"255.0618\" height=\"29.991083\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"294.852769pt\" height=\"53.196474pt\" viewBox=\"0 0 294.852769 53.196474\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:11.107787</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.196474  L 294.852769 53.196474  L 294.852769 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 37.00656 45.408755  L 42.22944 45.408755  L 42.22944 22.706075  L 37.00656 22.706075  z \" clip-path=\"url(#p94724589d1)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 121.87836 45.408755  L 127.10124 45.408755  L 127.10124 22.706075  L 121.87836 22.706075  z \" clip-path=\"url(#p94724589d1)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 216.54306 45.408755  L 221.76594 45.408755  L 221.76594 22.706075  L 216.54306 22.706075  z \" clip-path=\"url(#p94724589d1)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 12.785576  L 72.91386 12.785576  \" clip-path=\"url(#p94724589d1)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 91.19394 12.785576  L 157.78566 12.785576  \" clip-path=\"url(#p94724589d1)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 176.06574 12.785576  L 262.24326 12.785576  \" clip-path=\"url(#p94724589d1)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-32\" d=\"M 3150 0  L 459 0  L 459 488  L 1516 1538  Q 1775 1794 1937 1981  Q 2100 2169 2190 2323  Q 2281 2478 2312 2615  Q 2344 2753 2344 2913  Q 2344 3063 2303 3198  Q 2263 3334 2178 3437  Q 2094 3541 1959 3600  Q 1825 3659 1638 3659  Q 1378 3659 1165 3543  Q 953 3428 775 3244  L 475 3603  Q 706 3847 1007 3994  Q 1309 4141 1709 4141  Q 1981 4141 2204 4059  Q 2428 3978 2590 3825  Q 2753 3672 2842 3450  Q 2931 3228 2931 2950  Q 2931 2716 2868 2516  Q 2806 2316 2679 2117  Q 2553 1919 2361 1706  Q 2169 1494 1906 1241  L 1166 519  L 3150 519  L 3150 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-77\" d=\"M 3406 3138  L 2950 0  L 2291 0  L 1838 1313  L 1747 1631  L 1644 1294  L 1209 0  L 569 0  L 116 3138  L 647 3138  L 909 1006  L 966 531  L 1100 947  L 1556 2356  L 1947 2356  L 2438 966  L 2578 550  L 2625 991  L 2869 3138  L 3406 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- h -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-68\" d=\"M 3022 0  L 2478 0  L 2478 2003  Q 2478 2366 2342 2545  Q 2206 2725 1953 2725  Q 1844 2725 1748 2695  Q 1653 2666 1550 2592  Q 1447 2519 1325 2394  Q 1203 2269 1044 2081  L 1044 0  L 500 0  L 500 4416  L 1044 4416  L 1044 3138  L 1025 2644  Q 1153 2797 1276 2901  Q 1400 3006 1523 3072  Q 1647 3138 1775 3166  Q 1903 3194 2041 3194  Q 2509 3194 2765 2908  Q 3022 2622 3022 2047  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-68\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- h -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-68\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- - -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2d\" d=\"M 2694 1447  L 825 1447  L 825 1959  L 2694 1959  L 2694 1447  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-72\" d=\"M 628 3138  L 1125 3138  L 1141 2559  Q 1419 2894 1689 3044  Q 1959 3194 2234 3194  Q 2722 3194 2973 2878  Q 3225 2563 3206 1941  L 2656 1941  Q 2666 2353 2536 2539  Q 2406 2725 2156 2725  Q 2047 2725 1936 2686  Q 1825 2647 1708 2561  Q 1591 2475 1459 2340  Q 1328 2206 1178 2016  L 1178 0  L 628 0  L 628 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- * -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(268.119 8.97) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2a\" d=\"M 3003 2625  L 2791 2253  L 1913 2834  L 1984 1766  L 1538 1766  L 1606 2834  L 709 2253  L 513 2619  L 1472 3091  L 513 3572  L 728 3938  L 1613 3347  L 1538 4416  L 1984 4416  L 1906 3347  L 2791 3944  L 3009 3559  L 2047 3084  L 3003 2625  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2a\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(274.6476 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(281.1762 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(287.7048 8.97) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(35.21781 36.559837) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-32\" d=\"M 3222 541  L 3222 0  L 194 0  Q 188 203 259 391  Q 375 700 629 1000  Q 884 1300 1366 1694  Q 2113 2306 2375 2664  Q 2638 3022 2638 3341  Q 2638 3675 2398 3904  Q 2159 4134 1775 4134  Q 1369 4134 1125 3890  Q 881 3647 878 3216  L 300 3275  Q 359 3922 746 4261  Q 1134 4600 1788 4600  Q 2447 4600 2831 4234  Q 3216 3869 3216 3328  Q 3216 3053 3103 2787  Q 2991 2522 2730 2228  Q 2469 1934 1863 1422  Q 1356 997 1212 845  Q 1069 694 975 541  L 3222 541  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(37.115578 21.320075) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(23.203 51.805224) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(120.08961 36.559837) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(121.987378 21.320075) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(108.0748 51.805224) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(214.75431 36.559837) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(216.652078 21.320075) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_53\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(202.7395 51.805224) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p94724589d1\">\n",
       "   <rect x=\"0\" y=\"3.92496\" width=\"294.2334\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([[0.5968813],\n",
       "       [0.2174173]])"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set a learning rate\n",
    "lr = 1e-5\n",
    "\n",
    "with tsensor.explain():\n",
    "    # Update the bias values\n",
    "    l2_bias = l2_bias - l2_b_gradient * lr\n",
    "\n",
    "with tsensor.explain():\n",
    "    # Update the weight values\n",
    "    l2_weights = l2_weights - l2_w_gradient * lr\n",
    "\n",
    "l2_weights"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Do continue backpropagation, we now need to find our loss gradient with respect to our layer 1 outputs.  Our layer 1 outputs are scaled by the weights to get our output:\n",
    "\n",
    "![layer 2 backwards](images/dense/layer2_input_bw.svg)\n",
    "\n",
    "So we have to multiply our output gradient by our weights to get the gradient with respect to the input values:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"386.253169pt\" height=\"53.67788pt\" viewBox=\"0 0 386.253169 53.67788\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:11.192499</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.67788  L 386.253169 53.67788  L 386.253169 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 64.10025 45.890162  L 86.95035 45.890162  L 86.95035 23.187482  L 64.10025 23.187482  z \" clip-path=\"url(#p1da87ca2cc)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 200.22156 45.890162  L 205.44444 45.890162  L 205.44444 23.187482  L 200.22156 23.187482  z \" clip-path=\"url(#p1da87ca2cc)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 299.12985 28.376666  L 321.97995 28.376666  L 321.97995 23.187482  L 299.12985 23.187482  z \" clip-path=\"url(#p1da87ca2cc)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 13.266983  L 144.72846 13.266983  \" clip-path=\"url(#p1da87ca2cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 169.53714 13.266983  L 236.12886 13.266983  \" clip-path=\"url(#p1da87ca2cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 254.40894 13.266983  L 366.70086 13.266983  \" clip-path=\"url(#p1da87ca2cc)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-31\" d=\"M 3116 0  L 550 0  L 550 506  L 1600 506  L 1600 3488  L 622 2956  L 422 3419  L 1722 4103  L 2203 4103  L 2203 506  L 3116 506  L 3116 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- c -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-63\" d=\"M 2938 116  Q 2725 34 2501 -5  Q 2278 -44 2041 -44  Q 1297 -44 895 359  Q 494 763 494 1538  Q 494 1909 609 2212  Q 725 2516 934 2731  Q 1144 2947 1434 3064  Q 1725 3181 2075 3181  Q 2319 3181 2531 3147  Q 2744 3113 2938 3034  L 2938 2516  Q 2734 2622 2523 2670  Q 2313 2719 2088 2719  Q 1878 2719 1692 2639  Q 1506 2559 1365 2409  Q 1225 2259 1144 2043  Q 1063 1828 1063 1556  Q 1063 988 1339 705  Q 1616 422 2106 422  Q 2328 422 2536 472  Q 2744 522 2938 622  L 2938 116  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-63\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- v -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-76\" d=\"M 206 3138  L 825 3138  L 1594 1063  L 1759 556  L 1931 1075  L 2694 3138  L 3291 3138  L 2059 0  L 1434 0  L 206 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-76\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-72\" d=\"M 628 3138  L 1125 3138  L 1141 2559  Q 1419 2894 1689 3044  Q 1959 3194 2234 3194  Q 2722 3194 2973 2878  Q 3225 2563 3206 1941  L 2656 1941  Q 2666 2353 2536 2539  Q 2406 2725 2156 2725  Q 2047 2725 1936 2686  Q 1825 2647 1708 2561  Q 1591 2475 1459 2340  Q 1328 2206 1178 2016  L 1178 0  L 628 0  L 628 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- ( -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-28\" d=\"M 2378 -1313  Q 938 22 938 1638  Q 938 2016 1014 2392  Q 1091 2769 1261 3147  Q 1431 3525 1711 3903  Q 1991 4281 2391 4653  L 2706 4331  Q 1494 3134 1494 1678  Q 1494 953 1800 284  Q 2106 -384 2706 -978  L 2378 -1313  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-28\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- 2 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-32\" d=\"M 3150 0  L 459 0  L 459 488  L 1516 1538  Q 1775 1794 1937 1981  Q 2100 2169 2190 2323  Q 2281 2478 2312 2615  Q 2344 2753 2344 2913  Q 2344 3063 2303 3198  Q 2263 3334 2178 3437  Q 2094 3541 1959 3600  Q 1825 3659 1638 3659  Q 1378 3659 1165 3543  Q 953 3428 775 3244  L 475 3603  Q 706 3847 1007 3994  Q 1309 4141 1709 4141  Q 1981 4141 2204 4059  Q 2428 3978 2590 3825  Q 2753 3672 2842 3450  Q 2931 3228 2931 2950  Q 2931 2716 2868 2516  Q 2806 2316 2679 2117  Q 2553 1919 2361 1706  Q 2169 1494 1906 1241  L 1166 519  L 3150 519  L 3150 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- w -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-77\" d=\"M 3406 3138  L 2950 0  L 2291 0  L 1838 1313  L 1747 1631  L 1644 1294  L 1209 0  L 569 0  L 116 3138  L 647 3138  L 909 1006  L 966 531  L 1100 947  L 1556 2356  L 1947 2356  L 2438 966  L 2578 550  L 2625 991  L 2869 3138  L 3406 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-77\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- h -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-68\" d=\"M 3022 0  L 2478 0  L 2478 2003  Q 2478 2366 2342 2545  Q 2206 2725 1953 2725  Q 1844 2725 1748 2695  Q 1653 2666 1550 2592  Q 1447 2519 1325 2394  Q 1203 2269 1044 2081  L 1044 0  L 500 0  L 500 4416  L 1044 4416  L 1044 3138  L 1025 2644  Q 1153 2797 1276 2901  Q 1400 3006 1523 3072  Q 1647 3138 1775 3166  Q 1903 3194 2041 3194  Q 2509 3194 2765 2908  Q 3022 2622 3022 2047  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-68\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- @ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-40\" d=\"M 2438 1275  Q 2409 1075 2406 944  Q 2403 813 2423 738  Q 2444 663 2487 633  Q 2531 603 2597 603  Q 2684 603 2762 695  Q 2841 788 2902 980  Q 2963 1172 2998 1465  Q 3034 1759 3034 2163  Q 3034 2613 2978 2966  Q 2922 3319 2800 3566  Q 2678 3813 2483 3942  Q 2288 4072 2009 4072  Q 1797 4072 1598 3964  Q 1400 3856 1229 3661  Q 1059 3466 920 3192  Q 781 2919 682 2587  Q 584 2256 529 1875  Q 475 1494 475 1081  Q 475 75 778 -420  Q 1081 -916 1631 -916  Q 1909 -916 2150 -852  Q 2391 -788 2650 -659  L 2650 -1063  Q 2394 -1181 2137 -1240  Q 1881 -1300 1600 -1300  Q 803 -1300 420 -703  Q 38 -106 31 1075  Q 28 1547 93 1980  Q 159 2413 282 2788  Q 406 3163 582 3470  Q 759 3778 982 3995  Q 1206 4213 1468 4333  Q 1731 4453 2028 4453  Q 2400 4453 2673 4301  Q 2947 4150 3125 3864  Q 3303 3578 3389 3162  Q 3475 2747 3475 2216  Q 3472 1678 3405 1295  Q 3338 913 3216 669  Q 3094 425 2920 311  Q 2747 197 2534 197  Q 2291 197 2172 322  Q 2053 447 2053 659  Q 1934 419 1796 308  Q 1659 197 1466 197  Q 1172 197 1025 417  Q 878 638 878 1113  Q 878 1284 898 1481  Q 919 1678 967 1876  Q 1016 2075 1094 2258  Q 1172 2441 1286 2580  Q 1400 2719 1556 2803  Q 1713 2888 1913 2888  Q 2031 2888 2134 2859  Q 2238 2831 2284 2803  L 2688 2900  L 2438 1275  z M 2119 2388  Q 2091 2425 2033 2454  Q 1975 2484 1888 2484  Q 1794 2484 1719 2418  Q 1644 2353 1586 2243  Q 1528 2134 1489 1995  Q 1450 1856 1423 1709  Q 1397 1563 1386 1420  Q 1375 1278 1375 1166  Q 1375 866 1412 734  Q 1450 603 1556 603  Q 1594 603 1631 618  Q 1669 634 1711 679  Q 1753 725 1803 806  Q 1853 888 1913 1019  L 2119 2388  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-40\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6f\" d=\"M 3231 1594  Q 3231 1228 3128 923  Q 3025 619 2831 401  Q 2638 184 2359 64  Q 2081 -56 1728 -56  Q 1391 -56 1123 48  Q 856 153 670 356  Q 484 559 386 859  Q 288 1159 288 1550  Q 288 1916 391 2217  Q 494 2519 687 2736  Q 881 2953 1159 3073  Q 1438 3194 1791 3194  Q 2128 3194 2395 3089  Q 2663 2984 2848 2782  Q 3034 2581 3132 2281  Q 3231 1981 3231 1594  z M 2675 1569  Q 2675 1859 2611 2076  Q 2547 2294 2428 2439  Q 2309 2584 2139 2657  Q 1969 2731 1759 2731  Q 1516 2731 1342 2636  Q 1169 2541 1058 2381  Q 947 2222 895 2011  Q 844 1800 844 1569  Q 844 1278 908 1059  Q 972 841 1090 695  Q 1209 550 1378 476  Q 1547 403 1759 403  Q 2003 403 2176 498  Q 2350 594 2461 753  Q 2572 913 2623 1123  Q 2675 1334 2675 1569  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-75\" d=\"M 3022 0  L 2534 0  L 2516 506  Q 2375 344 2248 236  Q 2122 128 1997 62  Q 1872 -3 1745 -29  Q 1619 -56 1478 -56  Q 994 -56 747 228  Q 500 513 500 1088  L 500 3138  L 1044 3138  L 1044 1131  Q 1044 409 1588 409  Q 1688 409 1783 439  Q 1878 469 1983 542  Q 2088 616 2208 741  Q 2328 866 2478 1056  L 2478 3138  L 3022 3138  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(268.119 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(274.6476 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-70\" d=\"M 3181 1625  Q 3181 1206 3064 893  Q 2947 581 2740 375  Q 2534 169 2253 65  Q 1972 -38 1644 -38  Q 1494 -38 1345 -22  Q 1197 -6 1044 31  L 1044 -1281  L 500 -1281  L 500 3138  L 984 3138  L 1019 2613  Q 1253 2934 1518 3064  Q 1784 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1194 475 1359 439  Q 1525 403 1684 403  Q 2125 403 2375 701  Q 2625 1000 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(281.1762 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(287.7048 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(294.2334 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(300.762 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(307.2906 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(313.8192 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(320.3478 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(326.8764 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(333.405 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(339.9336 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_53\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(346.4622 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_54\">\n",
       "    <!-- . -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(352.9908 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2e\" d=\"M 1734 984  Q 1841 984 1936 943  Q 2031 903 2101 831  Q 2172 759 2212 664  Q 2253 569 2253 459  Q 2253 353 2212 259  Q 2172 166 2101 95  Q 2031 25 1936 -15  Q 1841 -56 1734 -56  Q 1625 -56 1531 -15  Q 1438 25 1367 95  Q 1297 166 1256 259  Q 1216 353 1216 459  Q 1216 569 1256 664  Q 1297 759 1367 831  Q 1438 903 1531 943  Q 1625 984 1734 984  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_55\">\n",
       "    <!-- T -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(359.5194 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-54\" d=\"M 3250 3609  L 2041 3609  L 2041 0  L 1478 0  L 1478 3609  L 269 3609  L 269 4084  L 3250 4084  L 3250 3609  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-54\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_56\">\n",
       "    <!-- ) -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(366.048 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-29\" d=\"M 1141 4653  Q 2581 3319 2581 1684  Q 2581 1347 2512 984  Q 2444 622 2278 242  Q 2113 -138 1833 -528  Q 1553 -919 1128 -1313  L 813 -991  Q 1422 -388 1722 268  Q 2022 925 2022 1644  Q 2022 3131 813 4319  L 1141 4653  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-29\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_57\">\n",
       "    <!-- . -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(372.5766 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-2e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_58\">\n",
       "    <!-- T -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(379.1052 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-54\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_59\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(62.3115 37.041243) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-35\" d=\"M 266 1200  L 856 1250  Q 922 819 1161 601  Q 1400 384 1738 384  Q 2144 384 2425 690  Q 2706 997 2706 1503  Q 2706 1984 2436 2262  Q 2166 2541 1728 2541  Q 1456 2541 1237 2417  Q 1019 2294 894 2097  L 366 2166  L 809 4519  L 3088 4519  L 3088 3981  L 1259 3981  L 1013 2750  Q 1425 3038 1878 3038  Q 2478 3038 2890 2622  Q 3303 2206 3303 1553  Q 3303 931 2941 478  Q 2500 -78 1738 -78  Q 1113 -78 717 272  Q 322 622 266 1200  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_60\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(73.022878 21.801482) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-32\" d=\"M 3222 541  L 3222 0  L 194 0  Q 188 203 259 391  Q 375 700 629 1000  Q 884 1300 1366 1694  Q 2113 2306 2375 2664  Q 2638 3022 2638 3341  Q 2638 3675 2398 3904  Q 2159 4134 1775 4134  Q 1369 4134 1125 3890  Q 881 3647 878 3216  L 300 3275  Q 359 3922 746 4261  Q 1134 4600 1788 4600  Q 2447 4600 2831 4234  Q 3216 3869 3216 3328  Q 3216 3053 3103 2787  Q 2991 2522 2730 2228  Q 2469 1934 1863 1422  Q 1356 997 1212 845  Q 1069 694 975 541  L 3222 541  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_61\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(59.1103 52.28663) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_62\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(198.43281 37.041243) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_63\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(200.330578 21.801482) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-31\" d=\"M 2384 0  L 1822 0  L 1822 3584  Q 1619 3391 1289 3197  Q 959 3003 697 2906  L 697 3450  Q 1169 3672 1522 3987  Q 1875 4303 2022 4600  L 2384 4600  L 2384 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_64\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(186.418 52.28663) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_65\">\n",
       "    <!-- 1 -->\n",
       "    <g transform=\"translate(297.3411 28.284495) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_66\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(308.052478 21.801482) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_67\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(294.1399 34.773134) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p1da87ca2cc\">\n",
       "   <rect x=\"0\" y=\"4.406366\" width=\"385.6338\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([[-21.25195862,  -7.74114297],\n",
       "       [-22.26665682,  -8.11075238],\n",
       "       [-23.28135503,  -8.48036179],\n",
       "       [ 17.07080512,   6.21813478],\n",
       "       [ 10.56181457,   3.84719912]])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with tsensor.explain():\n",
    "    # Calculate the gradient on the output of layer 1\n",
    "    l1_activated_gradient = (l2_weights @ output_gradient.T).T\n",
    "\n",
    "l1_activated_gradient"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Layer 1 Gradients\n",
    "\n",
    "Now, we can calculate the gradient with respect to the parameters in layer 1 ($W_{1}$ and $B_{1}$).  Before we do this, we have to differentiate across the nonlinear activation function.\n",
    "\n",
    "You may remember that the derivative is the slope of a function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x144a80460>]"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Generate a range of predictions between -50 and 50.\n",
    "temps = np.arange(-50,50)\n",
    "\n",
    "# Predict tmax_tomorrow given each of our input temps\n",
    "plt.plot(temps, np.maximum(0, temps))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see above, the slope of the relu function is `1` when the input is above `0`, and `0` when the input is below `0`.  The slope of the relu function is undefined when the input equals `0` (it is `1` above and `0` below).  But by convention, we assign a derivative of `0` to the relu function at `0`.\n",
    "\n",
    "We can plot the derivative of the relu function:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x144a3d390>]"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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rdraWknSsmXLdPnll2v16tW65ppr1NDQoNdff12PP/746P4mAABgXIo7jCxcuFAHDhxQdXW1AoGA8vPztXnz5ugk1b179yoxsb/gcvHFF+u5557TPffco7vuukvnnXeeXnjhBc2aNWv0fgsAADBuJbju0Rv9PSwYDCo9PV1dXV1KS0szPRwAADAMw/37TW8aAABgFGEEAAAYRRgBAABGEUYAAIBRhBEAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYFTcy8GbEFkkNhgMGh4JAAAYrsjf7c9a7H1chJHu7m5JUk5OjuGRAACAeHV3dys9PX3I18dFb5pwOKz9+/dr8uTJSkhIMD2cMRcMBpWTk6P29nZ684wBzvfY4nyPLc732LL9fLuuq+7ubmVlZcU00f1P46IykpiYqDPPPNP0MIxLS0uz8h+zKZzvscX5Hluc77Fl8/k+XkUkggmsAADAKMIIAAAwijAyDvh8PtXU1Mjn85keihU432OL8z22ON9ji/M9PONiAisAAJi4qIwAAACjCCMAAMAowggAADCKMAIAAIwijIwTvb29ys/PV0JCgtra2mJe+/vf/67LLrtMKSkpysnJ0YMPPmhmkOPcnj17dNNNN2n69Ok69dRTdc4556impkZ9fX0x+3G+R09dXZ1yc3OVkpKioqIibd++3fSQJoTa2lp96Utf0uTJkzVt2jQtWLBAu3btitnn008/VUVFhT73uc/ptNNO07e//W11dHQYGvHEsmrVKiUkJGj58uXRbZzv4yOMjBO33367srKyjtkeDAY1b948feELX1BLS4t+8Ytf6L777tPjjz9uYJTj286dOxUOh/XYY4/prbfe0kMPPaT6+nrddddd0X0436OnsbFRlZWVqqmpUWtrq/Ly8lRaWqrOzk7TQxv3XnrpJVVUVOi1117T1q1bdfjwYc2bN089PT3RfVasWKE//vGPev755/XSSy9p//79+ta3vmVw1BPDX//6Vz322GOaPXt2zHbO92dw4XmbNm1yZ8yY4b711luuJPeNN96Ivvboo4+6U6dOdXt7e6Pb7rjjDvf88883MNKJ58EHH3SnT58efc75Hj2FhYVuRUVF9LnjOG5WVpZbW1trcFQTU2dnpyvJfemll1zXdd1Dhw65p5xyivv8889H93n77bddSW5zc7OpYY573d3d7nnnnedu3brVvfzyy91ly5a5rsv5Hg4qIx7X0dGh8vJy/eY3v1Fqauoxrzc3N+vLX/6ykpOTo9tKS0u1a9cu/etf/xrLoU5IXV1dOv3006PPOd+jo6+vTy0tLSopKYluS0xMVElJiZqbmw2ObGLq6uqSpOi/5ZaWFh0+fDjm/M+YMUNnnXUW5/8EVFRU6Jprrok5rxLnezgIIx7muq5uvPFGLVmyRAUFBYPuEwgE5Pf7Y7ZFngcCgZM+xols9+7devjhh/WDH/wguo3zPToOHjwox3EGPZecx9EVDoe1fPlyXXLJJZo1a5akI/9Wk5OTNWXKlJh9Of8j19DQoNbWVtXW1h7zGuf7sxFGDLjzzjuVkJBw3MfOnTv18MMPq7u7W1VVVaaHPK4N93wP9MEHH+iqq67Sd7/7XZWXlxsaOXDiKioq9Oabb6qhocH0UCas9vZ2LVu2TM8++6xSUlJMD2dcmmR6ADb64Q9/qBtvvPG4+5x99tl68cUX1dzcfExPg4KCAl1//fV65plnlJmZecyM7MjzzMzMUR33eDXc8x2xf/9+XXnllbr44ouPmZjK+R4dGRkZSkpKGvRcch5Hz9KlS/WnP/1JL7/8ss4888zo9szMTPX19enQoUMx/1vn/I9MS0uLOjs7ddFFF0W3OY6jl19+WY888oi2bNnC+f4spietYGjvv/++u2PHjuhjy5YtriR3w4YNbnt7u+u6/RMq+/r6osdVVVUxoXKE9u3b55533nnu9773PTcUCh3zOud79BQWFrpLly6NPnccx83OzmYC6ygIh8NuRUWFm5WV5b7zzjvHvB6ZULlhw4botp07dzKhcoSCwWDMZ/WOHTvcgoIC9/vf/767Y8cOzvcwEEbGkffee++Yu2kOHTrk+v1+94YbbnDffPNNt6GhwU1NTXUfe+wxcwMdp/bt2+eee+657le+8hV337597ocffhh9RHC+R09DQ4Pr8/ncp59+2v3HP/7h3nLLLe6UKVPcQCBgemjj3q233uqmp6e727Zti/l3/PHHH0f3WbJkiXvWWWe5L774ovv666+7xcXFbnFxscFRTywD76ZxXc73ZyGMjCODhRHXdd2//e1v7qWXXur6fD43OzvbXbVqlZkBjnNPPfWUK2nQx0Cc79Hz8MMPu2eddZabnJzsFhYWuq+99prpIU0IQ/07fuqpp6L7fPLJJ+5tt93mTp061U1NTXW/+c1vxgRvnJj/DCOc7+NLcF3XHfPvhgAAAI7ibhoAAGAUYQQAABhFGAEAAEYRRgAAgFGEEQAAYBRhBAAAGEUYAQAARhFGAACAUYQRAABgFGEEAAAYRRgBAABGEUYAAIBR/x8ozVSddm9xnwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compute the relu function over the temperatures\n",
    "activation = np.maximum(0, temps)\n",
    "\n",
    "# Plot the input temperatures against the derivative of relu (the slope)\n",
    "# np.roll will shift the values to the right one place, so we subtract the previous value\n",
    "plt.plot(temps[1:], activation[1:] - np.roll(activation, 1)[1:])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So to get from the gradient on the activation function to the pre-nonlinearity gradient, we have to multiply the gradient by `1` if the input is greater than `0`, and by `0` otherwise.  Intuitively, if the output of the nonlinearity was `0` or below, then it didn't contribute to the final prediction at all.  So this is making sure that we properly zero out our gradient at these points, matching what happened in the forward pass."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<svg xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns=\"http://www.w3.org/2000/svg\" width=\"471.124969pt\" height=\"53.67788pt\" viewBox=\"0 0 471.124969 53.67788\" version=\"1.1\">\n",
       " <metadata>\n",
       "  <rdf:RDF xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:cc=\"http://creativecommons.org/ns#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n",
       "   <cc:Work>\n",
       "    <dc:type rdf:resource=\"http://purl.org/dc/dcmitype/StillImage\"/>\n",
       "    <dc:date>2023-01-18T15:53:11.442437</dc:date>\n",
       "    <dc:format>image/svg+xml</dc:format>\n",
       "    <dc:creator>\n",
       "     <cc:Agent>\n",
       "      <dc:title>Matplotlib v3.6.2, https://matplotlib.org/</dc:title>\n",
       "     </cc:Agent>\n",
       "    </dc:creator>\n",
       "   </cc:Work>\n",
       "  </rdf:RDF>\n",
       " </metadata>\n",
       " <defs>\n",
       "  <style type=\"text/css\">*{stroke-linejoin: round; stroke-linecap: butt}</style>\n",
       " </defs>\n",
       " <g id=\"figure_1\">\n",
       "  <g id=\"patch_1\">\n",
       "   <path d=\"M 0 53.67788  L 471.124969 53.67788  L 471.124969 0  L 0 0  z \" style=\"fill: #ffffff\"/>\n",
       "  </g>\n",
       "  <g id=\"axes_1\">\n",
       "   <g id=\"patch_2\">\n",
       "    <path d=\"M 54.30735 45.890162  L 77.15745 45.890162  L 77.15745 23.187482  L 54.30735 23.187482  z \" clip-path=\"url(#p38090ed304)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_3\">\n",
       "    <path d=\"M 201.20085 45.890162  L 224.05095 45.890162  L 224.05095 23.187482  L 201.20085 23.187482  z \" clip-path=\"url(#p38090ed304)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"patch_4\">\n",
       "    <path d=\"M 403.58745 45.890162  L 426.43755 45.890162  L 426.43755 23.187482  L 403.58745 23.187482  z \" clip-path=\"url(#p38090ed304)\" style=\"fill: #a8e1b0; fill-opacity: 0.75; stroke: #808080; stroke-width: 0.7; stroke-linejoin: miter\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_1\">\n",
       "    <path d=\"M 6.32214 13.266983  L 125.14266 13.266983  \" clip-path=\"url(#p38090ed304)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_2\">\n",
       "    <path d=\"M 143.42274 13.266983  L 281.82906 13.266983  \" clip-path=\"url(#p38090ed304)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"line2d_3\">\n",
       "    <path d=\"M 384.98094 13.266983  L 445.04406 13.266983  \" clip-path=\"url(#p38090ed304)\" style=\"fill: none; stroke: #c2c2c2; stroke-width: 0.5; stroke-linecap: square\"/>\n",
       "   </g>\n",
       "   <g id=\"text_1\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(6.975 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6c\" d=\"M 1569 3969  L 641 3969  L 641 4416  L 2119 4416  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 3969  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_2\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(13.5036 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-31\" d=\"M 3116 0  L 550 0  L 550 506  L 1600 506  L 1600 3488  L 622 2956  L 422 3419  L 1722 4103  L 2203 4103  L 2203 506  L 3116 506  L 3116 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_3\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(20.0322 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-5f\" d=\"M 3519 -1281  L 0 -1281  L 0 -831  L 3519 -831  L 3519 -1281  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_4\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(26.5608 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6f\" d=\"M 3231 1594  Q 3231 1228 3128 923  Q 3025 619 2831 401  Q 2638 184 2359 64  Q 2081 -56 1728 -56  Q 1391 -56 1123 48  Q 856 153 670 356  Q 484 559 386 859  Q 288 1159 288 1550  Q 288 1916 391 2217  Q 494 2519 687 2736  Q 881 2953 1159 3073  Q 1438 3194 1791 3194  Q 2128 3194 2395 3089  Q 2663 2984 2848 2782  Q 3034 2581 3132 2281  Q 3231 1981 3231 1594  z M 2675 1569  Q 2675 1859 2611 2076  Q 2547 2294 2428 2439  Q 2309 2584 2139 2657  Q 1969 2731 1759 2731  Q 1516 2731 1342 2636  Q 1169 2541 1058 2381  Q 947 2222 895 2011  Q 844 1800 844 1569  Q 844 1278 908 1059  Q 972 841 1090 695  Q 1209 550 1378 476  Q 1547 403 1759 403  Q 2003 403 2176 498  Q 2350 594 2461 753  Q 2572 913 2623 1123  Q 2675 1334 2675 1569  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_5\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(33.0894 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-75\" d=\"M 3022 0  L 2534 0  L 2516 506  Q 2375 344 2248 236  Q 2122 128 1997 62  Q 1872 -3 1745 -29  Q 1619 -56 1478 -56  Q 994 -56 747 228  Q 500 513 500 1088  L 500 3138  L 1044 3138  L 1044 1131  Q 1044 409 1588 409  Q 1688 409 1783 439  Q 1878 469 1983 542  Q 2088 616 2208 741  Q 2328 866 2478 1056  L 2478 3138  L 3022 3138  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_6\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(39.618 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-74\" d=\"M 3028 44  Q 2844 -3 2647 -23  Q 2450 -44 2247 -44  Q 1656 -44 1365 223  Q 1075 491 1075 1044  L 1075 2681  L 197 2681  L 197 3138  L 1075 3138  L 1075 4000  L 1619 4141  L 1619 3138  L 3028 3138  L 3028 2681  L 1619 2681  L 1619 1088  Q 1619 750 1798 583  Q 1978 416 2328 416  Q 2478 416 2656 439  Q 2834 463 3028 513  L 3028 44  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_7\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(46.1466 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-70\" d=\"M 3181 1625  Q 3181 1206 3064 893  Q 2947 581 2740 375  Q 2534 169 2253 65  Q 1972 -38 1644 -38  Q 1494 -38 1345 -22  Q 1197 -6 1044 31  L 1044 -1281  L 500 -1281  L 500 3138  L 984 3138  L 1019 2613  Q 1253 2934 1518 3064  Q 1784 3194 2094 3194  Q 2363 3194 2566 3081  Q 2769 2969 2906 2764  Q 3044 2559 3112 2270  Q 3181 1981 3181 1625  z M 2625 1600  Q 2625 1847 2589 2053  Q 2553 2259 2475 2406  Q 2397 2553 2275 2636  Q 2153 2719 1984 2719  Q 1881 2719 1775 2686  Q 1669 2653 1555 2576  Q 1441 2500 1314 2373  Q 1188 2247 1044 2059  L 1044 538  Q 1194 475 1359 439  Q 1525 403 1684 403  Q 2125 403 2375 701  Q 2625 1000 2625 1600  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_8\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(52.6752 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_9\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(59.2038 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_10\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(65.7324 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_11\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(72.261 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-67\" d=\"M 2759 2694  Q 2847 2584 2895 2439  Q 2944 2294 2944 2125  Q 2944 1881 2855 1679  Q 2766 1478 2603 1334  Q 2441 1191 2214 1111  Q 1988 1031 1716 1031  Q 1519 1031 1347 1073  Q 1175 1116 1075 1178  Q 1016 1091 975 1012  Q 934 934 934 838  Q 934 719 1048 641  Q 1163 563 1350 556  L 2175 525  Q 2409 519 2607 466  Q 2806 413 2948 313  Q 3091 213 3170 66  Q 3250 -81 3250 -275  Q 3250 -484 3159 -671  Q 3069 -859 2880 -1001  Q 2691 -1144 2400 -1228  Q 2109 -1313 1709 -1313  Q 1328 -1313 1061 -1252  Q 794 -1191 622 -1083  Q 450 -975 372 -826  Q 294 -678 294 -500  Q 294 -272 400 -100  Q 506 72 728 231  Q 647 269 587 325  Q 528 381 490 448  Q 453 516 434 591  Q 416 666 416 738  Q 416 941 511 1109  Q 606 1278 738 1428  Q 678 1500 633 1569  Q 588 1638 555 1717  Q 522 1797 505 1889  Q 488 1981 488 2100  Q 488 2344 577 2545  Q 666 2747 827 2890  Q 988 3034 1214 3114  Q 1441 3194 1716 3194  Q 1831 3194 1937 3178  Q 2044 3163 2125 3138  L 3263 3138  L 3263 2694  L 2759 2694  z M 872 -453  Q 872 -675 1103 -776  Q 1334 -878 1747 -878  Q 2006 -878 2182 -831  Q 2359 -784 2467 -707  Q 2575 -631 2622 -532  Q 2669 -434 2669 -331  Q 2669 -141 2512 -50  Q 2356 41 2034 56  L 1216 84  Q 1113 16 1045 -50  Q 978 -116 940 -183  Q 903 -250 887 -317  Q 872 -384 872 -453  z M 1038 2113  Q 1038 1963 1088 1838  Q 1138 1713 1228 1625  Q 1319 1538 1442 1489  Q 1566 1441 1716 1441  Q 1878 1441 2004 1495  Q 2131 1550 2217 1644  Q 2303 1738 2348 1859  Q 2394 1981 2394 2113  Q 2394 2263 2344 2388  Q 2294 2513 2203 2600  Q 2113 2688 1989 2736  Q 1866 2784 1716 2784  Q 1553 2784 1426 2728  Q 1300 2672 1214 2580  Q 1128 2488 1083 2366  Q 1038 2244 1038 2113  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_12\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(78.7896 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-72\" d=\"M 628 3138  L 1125 3138  L 1141 2559  Q 1419 2894 1689 3044  Q 1959 3194 2234 3194  Q 2722 3194 2973 2878  Q 3225 2563 3206 1941  L 2656 1941  Q 2666 2353 2536 2539  Q 2406 2725 2156 2725  Q 2047 2725 1936 2686  Q 1825 2647 1708 2561  Q 1591 2475 1459 2340  Q 1328 2206 1178 2016  L 1178 0  L 628 0  L 628 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_13\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(85.3182 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-61\" d=\"M 2516 0  L 2503 422  Q 2247 169 1983 56  Q 1719 -56 1428 -56  Q 1159 -56 968 12  Q 778 81 654 201  Q 531 322 473 484  Q 416 647 416 838  Q 416 1309 767 1576  Q 1119 1844 1806 1844  L 2456 1844  L 2456 2119  Q 2456 2397 2278 2564  Q 2100 2731 1734 2731  Q 1469 2731 1211 2672  Q 953 2613 678 2503  L 678 2994  Q 781 3031 907 3067  Q 1034 3103 1175 3131  Q 1316 3159 1469 3176  Q 1622 3194 1778 3194  Q 2063 3194 2291 3131  Q 2519 3069 2676 2941  Q 2834 2813 2918 2619  Q 3003 2425 3003 2163  L 3003 0  L 2516 0  z M 2456 1428  L 1766 1428  Q 1563 1428 1416 1387  Q 1269 1347 1175 1272  Q 1081 1197 1036 1092  Q 991 988 991 856  Q 991 766 1019 683  Q 1047 600 1109 536  Q 1172 472 1272 434  Q 1372 397 1516 397  Q 1703 397 1945 511  Q 2188 625 2456 872  L 2456 1428  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_14\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(91.8468 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-64\" d=\"M 341 1503  Q 341 1903 450 2214  Q 559 2525 761 2739  Q 963 2953 1245 3064  Q 1528 3175 1875 3175  Q 2025 3175 2170 3156  Q 2316 3138 2456 3097  L 2456 4416  L 3003 4416  L 3003 0  L 2516 0  L 2497 594  Q 2269 263 2003 103  Q 1738 -56 1428 -56  Q 1159 -56 954 56  Q 750 169 614 373  Q 478 578 409 865  Q 341 1153 341 1503  z M 897 1538  Q 897 969 1064 689  Q 1231 409 1538 409  Q 1744 409 1973 593  Q 2203 778 2456 1141  L 2456 2597  Q 2322 2659 2159 2692  Q 1997 2725 1838 2725  Q 1394 2725 1145 2437  Q 897 2150 897 1538  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_15\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(98.3754 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-69\" d=\"M 1569 2688  L 641 2688  L 641 3138  L 2119 3138  L 2119 453  L 3053 453  L 3053 0  L 538 0  L 538 453  L 1569 453  L 1569 2688  z M 1759 4453  Q 1850 4453 1928 4420  Q 2006 4388 2064 4328  Q 2122 4269 2155 4192  Q 2188 4116 2188 4025  Q 2188 3938 2155 3859  Q 2122 3781 2064 3722  Q 2006 3663 1928 3630  Q 1850 3597 1759 3597  Q 1669 3597 1591 3630  Q 1513 3663 1455 3722  Q 1397 3781 1364 3859  Q 1331 3938 1331 4025  Q 1331 4116 1364 4192  Q 1397 4269 1455 4328  Q 1513 4388 1591 4420  Q 1669 4453 1759 4453  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_16\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(104.904 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-65\" d=\"M 3150 1734  Q 3150 1619 3147 1541  Q 3144 1463 3138 1394  L 934 1394  Q 934 913 1203 655  Q 1472 397 1978 397  Q 2116 397 2253 408  Q 2391 419 2519 437  Q 2647 456 2764 479  Q 2881 503 2981 531  L 2981 84  Q 2759 22 2479 -17  Q 2200 -56 1900 -56  Q 1497 -56 1206 53  Q 916 163 730 370  Q 544 578 455 879  Q 366 1181 366 1563  Q 366 1894 461 2189  Q 556 2484 739 2707  Q 922 2931 1187 3062  Q 1453 3194 1791 3194  Q 2119 3194 2372 3091  Q 2625 2988 2798 2798  Q 2972 2609 3061 2339  Q 3150 2069 3150 1734  z M 2584 1813  Q 2594 2022 2544 2195  Q 2494 2369 2389 2494  Q 2284 2619 2128 2689  Q 1972 2759 1766 2759  Q 1588 2759 1441 2690  Q 1294 2622 1187 2497  Q 1081 2372 1015 2197  Q 950 2022 934 1813  L 2584 1813  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_17\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(111.4326 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-6e\" d=\"M 500 3138  L 984 3138  L 1006 2631  Q 1144 2794 1272 2901  Q 1400 3009 1523 3075  Q 1647 3141 1775 3167  Q 1903 3194 2041 3194  Q 2525 3194 2773 2908  Q 3022 2622 3022 2047  L 3022 0  L 2478 0  L 2478 2003  Q 2478 2372 2340 2548  Q 2203 2725 1931 2725  Q 1831 2725 1736 2695  Q 1641 2666 1537 2592  Q 1434 2519 1314 2394  Q 1194 2269 1044 2081  L 1044 0  L 500 0  L 500 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_18\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(117.9612 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_19\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(124.4898 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-20\" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_20\">\n",
       "    <!-- = -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(131.0184 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-3d\" d=\"M 3103 2019  L 416 2019  L 416 2478  L 3103 2478  L 3103 2019  z M 3103 931  L 416 931  L 416 1391  L 3103 1391  L 3103 931  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-3d\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_21\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(137.547 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_22\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(144.0756 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_23\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(150.6042 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_24\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(157.1328 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_25\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(163.6614 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_26\">\n",
       "    <!-- c -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(170.19 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-63\" d=\"M 2938 116  Q 2725 34 2501 -5  Q 2278 -44 2041 -44  Q 1297 -44 895 359  Q 494 763 494 1538  Q 494 1909 609 2212  Q 725 2516 934 2731  Q 1144 2947 1434 3064  Q 1725 3181 2075 3181  Q 2319 3181 2531 3147  Q 2744 3113 2938 3034  L 2938 2516  Q 2734 2622 2523 2670  Q 2313 2719 2088 2719  Q 1878 2719 1692 2639  Q 1506 2559 1365 2409  Q 1225 2259 1144 2043  Q 1063 1828 1063 1556  Q 1063 988 1339 705  Q 1616 422 2106 422  Q 2328 422 2536 472  Q 2744 522 2938 622  L 2938 116  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-63\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_27\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(176.7186 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_28\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(183.2472 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_29\">\n",
       "    <!-- v -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(189.7758 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-76\" d=\"M 206 3138  L 825 3138  L 1594 1063  L 1759 556  L 1931 1075  L 2694 3138  L 3291 3138  L 2059 0  L 1434 0  L 206 3138  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-76\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_30\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(196.3044 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_31\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(202.833 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_32\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(209.3616 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_33\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(215.8902 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_34\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(222.4188 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_35\">\n",
       "    <!-- g -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(228.9474 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-67\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_36\">\n",
       "    <!-- r -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(235.476 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-72\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_37\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(242.0046 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_38\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(248.5332 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_39\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(255.0618 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_40\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(261.5904 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_41\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(268.119 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_42\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(274.6476 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_43\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(281.1762 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_44\">\n",
       "    <!-- * -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(287.7048 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2a\" d=\"M 3003 2625  L 2791 2253  L 1913 2834  L 1984 1766  L 1538 1766  L 1606 2834  L 709 2253  L 513 2619  L 1472 3091  L 513 3572  L 728 3938  L 1613 3347  L 1538 4416  L 1984 4416  L 1906 3347  L 2791 3944  L 3009 3559  L 2047 3084  L 3003 2625  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2a\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_45\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(294.2334 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_46\">\n",
       "    <!-- n -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(300.762 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_47\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(307.2906 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_48\">\n",
       "    <!-- . -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(313.8192 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2e\" d=\"M 1734 984  Q 1841 984 1936 943  Q 2031 903 2101 831  Q 2172 759 2212 664  Q 2253 569 2253 459  Q 2253 353 2212 259  Q 2172 166 2101 95  Q 2031 25 1936 -15  Q 1841 -56 1734 -56  Q 1625 -56 1531 -15  Q 1438 25 1367 95  Q 1297 166 1256 259  Q 1216 353 1216 459  Q 1216 569 1256 664  Q 1297 759 1367 831  Q 1438 903 1531 943  Q 1625 984 1734 984  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2e\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_49\">\n",
       "    <!-- h -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(320.3478 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-68\" d=\"M 3022 0  L 2478 0  L 2478 2003  Q 2478 2366 2342 2545  Q 2206 2725 1953 2725  Q 1844 2725 1748 2695  Q 1653 2666 1550 2592  Q 1447 2519 1325 2394  Q 1203 2269 1044 2081  L 1044 0  L 500 0  L 500 4416  L 1044 4416  L 1044 3138  L 1025 2644  Q 1153 2797 1276 2901  Q 1400 3006 1523 3072  Q 1647 3138 1775 3166  Q 1903 3194 2041 3194  Q 2509 3194 2765 2908  Q 3022 2622 3022 2047  L 3022 0  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-68\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_50\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(326.8764 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_51\">\n",
       "    <!-- a -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(333.405 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-61\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_52\">\n",
       "    <!-- v -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(339.9336 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-76\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_53\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(346.4622 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_54\">\n",
       "    <!-- s -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(352.9908 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-73\" d=\"M 2984 856  Q 2984 691 2928 559  Q 2872 428 2775 326  Q 2678 225 2550 153  Q 2422 81 2276 34  Q 2131 -13 1978 -34  Q 1825 -56 1678 -56  Q 1359 -56 1092 -28  Q 825 0 569 63  L 569 563  Q 844 484 1116 443  Q 1388 403 1656 403  Q 2047 403 2234 509  Q 2422 616 2422 813  Q 2422 897 2392 964  Q 2363 1031 2284 1092  Q 2206 1153 2042 1218  Q 1878 1284 1594 1369  Q 1381 1431 1201 1511  Q 1022 1591 890 1700  Q 759 1809 684 1956  Q 609 2103 609 2303  Q 609 2434 670 2590  Q 731 2747 878 2881  Q 1025 3016 1275 3105  Q 1525 3194 1900 3194  Q 2084 3194 2309 3173  Q 2534 3153 2778 3103  L 2778 2619  Q 2522 2681 2292 2711  Q 2063 2741 1894 2741  Q 1691 2741 1552 2709  Q 1413 2678 1327 2623  Q 1241 2569 1203 2495  Q 1166 2422 1166 2338  Q 1166 2253 1198 2184  Q 1231 2116 1320 2052  Q 1409 1988 1568 1923  Q 1728 1859 1984 1784  Q 2263 1703 2453 1614  Q 2644 1525 2762 1415  Q 2881 1306 2932 1168  Q 2984 1031 2984 856  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-73\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_55\">\n",
       "    <!-- i -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(359.5194 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-69\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_56\">\n",
       "    <!-- d -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(366.048 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-64\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_57\">\n",
       "    <!-- e -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(372.5766 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-65\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_58\">\n",
       "    <!-- ( -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(379.1052 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-28\" d=\"M 2378 -1313  Q 938 22 938 1638  Q 938 2016 1014 2392  Q 1091 2769 1261 3147  Q 1431 3525 1711 3903  Q 1991 4281 2391 4653  L 2706 4331  Q 1494 3134 1494 1678  Q 1494 953 1800 284  Q 2106 -384 2706 -978  L 2378 -1313  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-28\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_59\">\n",
       "    <!-- l -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(385.6338 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_60\">\n",
       "    <!-- 1 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(392.1624 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-31\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_61\">\n",
       "    <!-- _ -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(398.691 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-5f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_62\">\n",
       "    <!-- o -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(405.2196 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-6f\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_63\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(411.7482 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_64\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(418.2768 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_65\">\n",
       "    <!-- p -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(424.8054 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-70\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_66\">\n",
       "    <!-- u -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(431.334 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-75\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_67\">\n",
       "    <!-- t -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(437.8626 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-74\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_68\">\n",
       "    <!-- , -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(444.3912 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-2c\" d=\"M 744 -641  Q 903 -647 1053 -612  Q 1203 -578 1317 -511  Q 1431 -444 1500 -344  Q 1569 -244 1569 -116  Q 1569 16 1523 97  Q 1478 178 1422 247  Q 1366 316 1320 394  Q 1275 472 1275 603  Q 1275 669 1300 741  Q 1325 813 1376 872  Q 1428 931 1508 968  Q 1588 1006 1697 1006  Q 1806 1006 1907 961  Q 2009 916 2086 822  Q 2163 728 2208 587  Q 2253 447 2253 256  Q 2253 -3 2158 -242  Q 2063 -481 1873 -665  Q 1684 -850 1401 -959  Q 1119 -1069 744 -1069  L 744 -641  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-2c\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_69\">\n",
       "    <!--   -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(450.9198 9.451406) scale(0.13 -0.13)\">\n",
       "     <use xlink:href=\"#Consolas-20\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_70\">\n",
       "    <!-- 0 -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(457.4484 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-30\" d=\"M 3244 2041  Q 3244 1572 3150 1186  Q 3056 800 2865 523  Q 2675 247 2392 95  Q 2109 -56 1728 -56  Q 1400 -56 1131 67  Q 863 191 672 447  Q 481 703 378 1100  Q 275 1497 275 2041  Q 275 2509 370 2896  Q 466 3284 655 3561  Q 844 3838 1128 3989  Q 1413 4141 1791 4141  Q 2119 4141 2387 4017  Q 2656 3894 2847 3636  Q 3038 3378 3141 2981  Q 3244 2584 3244 2041  z M 2694 2022  Q 2694 2128 2686 2233  Q 2678 2338 2669 2438  L 941 1153  Q 988 991 1059 853  Q 1131 716 1232 617  Q 1334 519 1464 464  Q 1594 409 1759 409  Q 1972 409 2145 512  Q 2319 616 2441 819  Q 2563 1022 2628 1323  Q 2694 1625 2694 2022  z M 825 2059  Q 825 1963 826 1866  Q 828 1769 838 1678  L 2566 2956  Q 2519 3116 2447 3247  Q 2375 3378 2275 3473  Q 2175 3569 2047 3622  Q 1919 3675 1759 3675  Q 1547 3675 1373 3572  Q 1200 3469 1078 3264  Q 956 3059 890 2757  Q 825 2456 825 2059  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-30\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_71\">\n",
       "    <!-- ) -->\n",
       "    <g style=\"fill: #444443\" transform=\"translate(463.977 9.451406) scale(0.13 -0.13)\">\n",
       "     <defs>\n",
       "      <path id=\"Consolas-29\" d=\"M 1141 4653  Q 2581 3319 2581 1684  Q 2581 1347 2512 984  Q 2444 622 2278 242  Q 2113 -138 1833 -528  Q 1553 -919 1128 -1313  L 813 -991  Q 1422 -388 1722 268  Q 2022 925 2022 1644  Q 2022 3131 813 4319  L 1141 4653  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#Consolas-29\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_72\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(52.5186 37.041243) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-35\" d=\"M 266 1200  L 856 1250  Q 922 819 1161 601  Q 1400 384 1738 384  Q 2144 384 2425 690  Q 2706 997 2706 1503  Q 2706 1984 2436 2262  Q 2166 2541 1728 2541  Q 1456 2541 1237 2417  Q 1019 2294 894 2097  L 366 2166  L 809 4519  L 3088 4519  L 3088 3981  L 1259 3981  L 1013 2750  Q 1425 3038 1878 3038  Q 2478 3038 2890 2622  Q 3303 2206 3303 1553  Q 3303 931 2941 478  Q 2500 -78 1738 -78  Q 1113 -78 717 272  Q 322 622 266 1200  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_73\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(63.229978 21.801482) scale(0.09 -0.09)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-32\" d=\"M 3222 541  L 3222 0  L 194 0  Q 188 203 259 391  Q 375 700 629 1000  Q 884 1300 1366 1694  Q 2113 2306 2375 2664  Q 2638 3022 2638 3341  Q 2638 3675 2398 3904  Q 2159 4134 1775 4134  Q 1369 4134 1125 3890  Q 881 3647 878 3216  L 300 3275  Q 359 3922 746 4261  Q 1134 4600 1788 4600  Q 2447 4600 2831 4234  Q 3216 3869 3216 3328  Q 3216 3053 3103 2787  Q 2991 2522 2730 2228  Q 2469 1934 1863 1422  Q 1356 997 1212 845  Q 1069 694 975 541  L 3222 541  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_74\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(49.3174 52.28663) scale(0.07 -0.07)\">\n",
       "     <defs>\n",
       "      <path id=\"ArialMT-3c\" d=\"M 350 2003  L 350 2528  L 3384 3809  L 3384 3250  L 978 2263  L 3384 1266  L 3384 706  L 350 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-66\" d=\"M 3059 4863  L 2969 4384  L 2419 4384  Q 2106 4384 1964 4261  Q 1822 4138 1753 3809  L 1691 3500  L 2638 3500  L 2553 3053  L 1606 3053  L 1013 0  L 434 0  L 1031 3053  L 481 3053  L 563 3500  L 1113 3500  L 1159 3744  Q 1278 4363 1576 4613  Q 1875 4863 2516 4863  L 3059 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6c\" d=\"M 1172 4863  L 1747 4863  L 800 0  L 225 0  L 1172 4863  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-6f\" d=\"M 1625 -91  Q 1009 -91 651 289  Q 294 669 294 1325  Q 294 1706 417 2101  Q 541 2497 738 2766  Q 1047 3184 1428 3384  Q 1809 3584 2291 3584  Q 2888 3584 3255 3212  Q 3622 2841 3622 2241  Q 3622 1825 3500 1412  Q 3378 1000 3181 728  Q 2875 309 2494 109  Q 2113 -91 1625 -91  z M 891 1344  Q 891 869 1089 633  Q 1288 397 1691 397  Q 2269 397 2648 901  Q 3028 1406 3028 2181  Q 3028 2634 2825 2865  Q 2622 3097 2228 3097  Q 1903 3097 1650 2945  Q 1397 2794 1197 2484  Q 1050 2253 970 1956  Q 891 1659 891 1344  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-61\" d=\"M 3438 1997  L 3047 0  L 2472 0  L 2578 531  Q 2325 219 2001 64  Q 1678 -91 1281 -91  Q 834 -91 548 182  Q 263 456 263 884  Q 263 1497 752 1853  Q 1241 2209 2100 2209  L 2900 2209  L 2931 2363  Q 2938 2388 2941 2417  Q 2944 2447 2944 2509  Q 2944 2788 2717 2942  Q 2491 3097 2081 3097  Q 1800 3097 1504 3025  Q 1209 2953 897 2809  L 997 3341  Q 1322 3463 1633 3523  Q 1944 3584 2234 3584  Q 2853 3584 3176 3315  Q 3500 3047 3500 2534  Q 3500 2431 3484 2292  Q 3469 2153 3438 1997  z M 2816 1759  L 2241 1759  Q 1534 1759 1195 1570  Q 856 1381 856 984  Q 856 709 1029 553  Q 1203 397 1509 397  Q 1978 397 2328 733  Q 2678 1069 2791 1631  L 2816 1759  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-Oblique-74\" d=\"M 2706 3500  L 2619 3053  L 1472 3053  L 1100 1153  Q 1081 1047 1072 975  Q 1063 903 1063 863  Q 1063 663 1183 572  Q 1303 481 1569 481  L 2150 481  L 2053 0  L 1503 0  Q 991 0 739 200  Q 488 400 488 806  Q 488 878 497 964  Q 506 1050 525 1153  L 897 3053  L 409 3053  L 500 3500  L 978 3500  L 1172 4494  L 1747 4494  L 1556 3500  L 2706 3500  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-36\" d=\"M 2113 2584  Q 1688 2584 1439 2293  Q 1191 2003 1191 1497  Q 1191 994 1439 701  Q 1688 409 2113 409  Q 2538 409 2786 701  Q 3034 994 3034 1497  Q 3034 2003 2786 2293  Q 2538 2584 2113 2584  z M 3366 4563  L 3366 3988  Q 3128 4100 2886 4159  Q 2644 4219 2406 4219  Q 1781 4219 1451 3797  Q 1122 3375 1075 2522  Q 1259 2794 1537 2939  Q 1816 3084 2150 3084  Q 2853 3084 3261 2657  Q 3669 2231 3669 1497  Q 3669 778 3244 343  Q 2819 -91 2113 -91  Q 1303 -91 875 529  Q 447 1150 447 2328  Q 447 3434 972 4092  Q 1497 4750 2381 4750  Q 2619 4750 2861 4703  Q 3103 4656 3366 4563  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"DejaVuSans-34\" d=\"M 2419 4116  L 825 1625  L 2419 1625  L 2419 4116  z M 2253 4666  L 3047 4666  L 3047 1625  L 3713 1625  L 3713 1100  L 3047 1100  L 3047 0  L 2419 0  L 2419 1100  L 313 1100  L 313 1709  L 2253 4666  z \" transform=\"scale(0.015625)\"/>\n",
       "      <path id=\"ArialMT-3e\" d=\"M 3384 2003  L 350 706  L 350 1266  L 2753 2263  L 350 3250  L 350 3809  L 3384 2528  L 3384 2003  z \" transform=\"scale(0.015625)\"/>\n",
       "     </defs>\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_75\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(199.4121 37.041243) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_76\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(210.123478 21.801482) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_77\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(196.2109 52.28663) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_78\">\n",
       "    <!-- 5 -->\n",
       "    <g transform=\"translate(401.7987 37.041243) rotate(-90) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-35\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_79\">\n",
       "    <!-- 2 -->\n",
       "    <g transform=\"translate(412.510078 21.801482) scale(0.09 -0.09)\">\n",
       "     <use xlink:href=\"#ArialMT-32\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "   <g id=\"text_80\">\n",
       "    <!-- &lt;${\\mathit{float64}}$&gt; -->\n",
       "    <g transform=\"translate(398.5975 52.28663) scale(0.07 -0.07)\">\n",
       "     <use xlink:href=\"#ArialMT-3c\" transform=\"translate(0 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-66\" transform=\"translate(58.398438 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6c\" transform=\"translate(93.603516 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-6f\" transform=\"translate(121.386719 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-61\" transform=\"translate(182.568359 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-Oblique-74\" transform=\"translate(243.847656 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-36\" transform=\"translate(283.056641 0.015625)\"/>\n",
       "     <use xlink:href=\"#DejaVuSans-34\" transform=\"translate(346.679688 0.015625)\"/>\n",
       "     <use xlink:href=\"#ArialMT-3e\" transform=\"translate(410.302734 0.015625)\"/>\n",
       "    </g>\n",
       "   </g>\n",
       "  </g>\n",
       " </g>\n",
       " <defs>\n",
       "  <clipPath id=\"p38090ed304\">\n",
       "   <rect x=\"0\" y=\"4.406366\" width=\"470.5056\" height=\"42.315395\"/>\n",
       "  </clipPath>\n",
       " </defs>\n",
       "</svg>"
      ],
      "text/plain": [
       "<IPython.core.display.SVG object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "array([[-21.25195862,  -7.74114297],\n",
       "       [-22.26665682,  -8.11075238],\n",
       "       [-23.28135503,  -8.48036179],\n",
       "       [  0.        ,   6.21813478],\n",
       "       [ 10.56181457,   3.84719912]])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "with tsensor.explain():\n",
    "    l1_output_gradient = l1_activated_gradient * np.heaviside(l1_output, 0)\n",
    "\n",
    "l1_output_gradient"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "After doing this, the layer 1 weight and bias updates are the same as for layer 2:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Calculate gradients wrt weights and biases for layer 1\n",
    "l1_w_gradient =  input.T @ output_gradient\n",
    "l1_b_gradient = np.mean(l1_output_gradient, axis=0)\n",
    "\n",
    "l1_weights -= l1_w_gradient * lr\n",
    "l1_bias = l1_b_gradient * lr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.928553, 0.208553]])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l1_weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-1.12476312e-04, -2.85338465e-05])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "l1_bias"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "At this point, we can end backpropagation, since we've computed the gradients at each of our layers.\n",
    "\n",
    "## Backpropagation\n",
    "\n",
    "Here is the algorithm we followed:\n",
    "\n",
    "1. Run the network forward pass, and get the output:\n",
    "2. Compute gradient with respect to the outputs of the network. (the `mse_grad` function)\n",
    "3. For each layer in the network:\n",
    "   - Compute the gradient with respect to the pre-nonlinearity output (if the layer has a nonlinearity)\n",
    "   - Compute the gradient with respect to the weights\n",
    "   - Compute the gradient with respect to the biases\n",
    "   - Compute the gradient with respect to the inputs to the layer\n",
    "4. Update the parameters in the network using gradient descent\n",
    "\n",
    "For convenience, we combined step 4 into step 3.  But it's important to note that backpropagation is step 3 above, and gradient descent is step 4.  Splitting these steps up makes it easier to use variations of regular gradient descent to update the weights (like Adam or RMSProp).\n",
    "\n",
    "Steps 3 and 4 are usually called the backward pass of a neural network.\n",
    "\n",
    "Backpropagation and gradient descent are the most complicated parts of training neural networks.  Intuitively, backpropagation is about reversing the forward pass of the network so that we can figure out how to reduce error.  To do this, we pass the loss gradient from layer to layer (applying the chain rule).\n",
    "\n",
    "## Batch Size\n",
    "\n",
    "In the example above, we used a **batch size** of `5`.  This means that we did the forward and backward pass using `5` inputs from the training dataset.  Larger batch sizes will use more memory, since we need to create larger matrices.  But they will also run faster, since we can process more examples at once.\n",
    "\n",
    "Batch size also affects gradient descent.  When we process `1` example at a time, we do a backward pass using the gradient of that single example.  With a larger batch size, we're averaging the gradient over every example in the batch when we update weights and biases.  This means that we may lose some accuracy in the updates when the batch size is too high.\n",
    "\n",
    "When the batch size is the same as the rows in the training data, then the update process is called **batch gradient descent** (confusing, I know!).  Otherwise, it is called **stochastic gradient descent**.  Either way, we still use backpropagation to find the gradients.\n",
    "\n",
    "## Putting it all together\n",
    "\n",
    "We now know enough to train a neural network to predict the weather!\n",
    "\n",
    "Let's first load our data and split it into 3 sets:\n",
    "\n",
    "- A training set, which we'll use to train our algorithm\n",
    "- A validation set, which we'll use to measure error during training\n",
    "- A test set, which we'll use to evaluate the model after it has been fit\n",
    "\n",
    "Creating separate sets like this helps us avoid overfitting, where our model looks great in training, but doesn't work in the real world."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "PREDICTORS = [\"tmax\", \"tmin\", \"rain\"]\n",
    "TARGET = \"tmax_tomorrow\"\n",
    "\n",
    "# Scale our data so relu works better\n",
    "# All temperature values in the original dataset are over 0, so relu won't do much for several epochs\n",
    "# Scaling will make some of the input data negative\n",
    "scaler = StandardScaler()\n",
    "data[PREDICTORS] = scaler.fit_transform(data[PREDICTORS])\n",
    "\n",
    "split_data = np.split(data, [int(.7 * len(data)), int(.85 * len(data))])\n",
    "(train_x, train_y), (valid_x, valid_y), (test_x, test_y) = [[d[PREDICTORS].to_numpy(), d[[TARGET]].to_numpy()] for d in\n",
    "                                                            split_data]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll train a neural network to predict `tmax_tomorrow` using `tmax`, `tmin`, and `rain`.\n",
    "\n",
    "To train our neural network, we need 4 elements:\n",
    "\n",
    "- A way to initialize our parameters (weights and biases for each layer)\n",
    "- A `forward` pass that computes predictions using the parameters\n",
    "- A loss function that measures the error of our predictions\n",
    "- A `backward` pass that updates our parameters to reduce the loss\n",
    "\n",
    "To initialize our weight parameters, we can use random initialization.  Random initialization helps the gradient descent algorithm descend to a global minimum efficiently (feel free to experiment with other initializations, like 0 or 1 to see what happens).\n",
    "\n",
    "It's common to initialize the bias to be `1` or `0`.\n",
    "\n",
    "We'll shrink the initial parameter values so we don't end up with predictions that are too large (this can cause gradient descent to take steps that are too large)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "def init_layers(inputs):\n",
    "    layers = []\n",
    "    for i in range(1, len(inputs)):\n",
    "        layers.append([\n",
    "            np.random.rand(inputs[i-1], inputs[i]) / 5 - .1,\n",
    "            np.ones((1,inputs[i]))\n",
    "        ])\n",
    "    return layers\n",
    "\n",
    "# This will initialize weights and biases for a 3-layer neural network with 10 units in the first layer, 10 in the second, and 1 in the final\n",
    "# The first number (3) is our number of input features\n",
    "layer_conf = [3,10,10,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We initialize one weight matrix and one bias matrix for each of our layers.\n",
    "\n",
    "In the forward pass of our network, we generate outputs for each layer by multiplying $W$ and $X$, then adding $B$.  If the layer is not our output layer, we also apply a nonlinearity (relu).\n",
    "\n",
    "The output of the last layer is our prediction for `tmax_tomorrow`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "def forward(batch, layers):\n",
    "    hidden = [batch.copy()]\n",
    "    for i in range(len(layers)):\n",
    "        batch = np.matmul(batch, layers[i][0]) + layers[i][1]\n",
    "        if i < len(layers) - 1:\n",
    "            batch = np.maximum(batch, 0)\n",
    "        # Store the forward pass hidden values for use in backprop\n",
    "        hidden.append(batch.copy())\n",
    "    return batch, hidden"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once we have predictions, we need to calculate error.  We have two functions, one to calculate the loss, and one to calculate the loss gradient (which helps us update our parameters):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "def mse(actual, predicted):\n",
    "    return (actual - predicted) ** 2\n",
    "\n",
    "def mse_grad(actual, predicted):\n",
    "    return predicted - actual"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the backward pass of the network, we adjust $W$ and $B$ by the gradient times learning rate."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "def backward(layers, hidden, grad, lr):\n",
    "    for i in range(len(layers)-1, -1, -1):\n",
    "        if i != len(layers) - 1:\n",
    "            grad = np.multiply(grad, np.heaviside(hidden[i+1], 0))\n",
    "\n",
    "        grad = grad.T\n",
    "        w_grad = np.matmul(grad, hidden[i]).T\n",
    "        b_grad = np.mean(grad.T, axis=0)\n",
    "\n",
    "        # Add in weight decay in the weight update.  We'll discuss this more in a later lesson.\n",
    "        layers[i][0] -= (w_grad + layers[i][0] * .01) * lr\n",
    "        layers[i][1] -= b_grad * lr\n",
    "        grad = np.matmul(layers[i][0], grad).T\n",
    "    return layers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, we'll write a loop that:\n",
    "\n",
    "- Makes predictions for each batch (we'll use a batch size of `8`)\n",
    "- Computes the gradient for each batch\n",
    "- Updates the parameters based on the gradient\n",
    "\n",
    "We will run the algorithm for several epochs - an epoch is each iteration over the training set.  Up to a point, more epochs will improve the accuracy.\n",
    "\n",
    "We will print out the loss on the validation set regularly so we can monitor the loss.  We know we have too many epochs if the validation loss is increasing instead of decreasing."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 0 Train MSE: 3283.4561294954806 Valid MSE: 1671.9101427457074\n",
      "Epoch: 1 Train MSE: 340.17665662971854 Valid MSE: 26.686232865338344\n",
      "Epoch: 2 Train MSE: 23.57695608976635 Valid MSE: 21.444521235970857\n",
      "Epoch: 3 Train MSE: 22.480049553881333 Valid MSE: 20.8856483138309\n",
      "Epoch: 4 Train MSE: 22.177913673364564 Valid MSE: 20.772480432308125\n",
      "Epoch: 5 Train MSE: 22.100448777123013 Valid MSE: 20.75464667809695\n",
      "Epoch: 6 Train MSE: 22.07944241189877 Valid MSE: 20.754633662386023\n",
      "Epoch: 7 Train MSE: 22.072761331247033 Valid MSE: 20.75651891779795\n",
      "Epoch: 8 Train MSE: 22.069651643396355 Valid MSE: 20.757598713472532\n",
      "Epoch: 9 Train MSE: 22.067326196621877 Valid MSE: 20.757959471284572\n"
     ]
    }
   ],
   "source": [
    "from statistics import mean\n",
    "\n",
    "lr = 1e-6\n",
    "epochs=10\n",
    "batch_size = 8\n",
    "\n",
    "layers = init_layers(layer_conf)\n",
    "\n",
    "for epoch in range(epochs):\n",
    "    epoch_loss = []\n",
    "\n",
    "    for i in range(0, train_x.shape[0], batch_size):\n",
    "        x_batch = train_x[i:(i+batch_size)]\n",
    "        y_batch = train_y[i:(i+batch_size)]\n",
    "        pred, hidden = forward(x_batch, layers)\n",
    "\n",
    "        loss = mse_grad(y_batch, pred)\n",
    "        epoch_loss.append(np.mean(loss ** 2))\n",
    "\n",
    "        layers = backward(layers, hidden, loss, lr)\n",
    "\n",
    "\n",
    "    valid_preds, _ = forward(valid_x, layers)\n",
    "\n",
    "    print(f\"Epoch: {epoch} Train MSE: {mean(epoch_loss)} Valid MSE: {np.mean(mse(valid_preds,valid_y))}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can display our final parameters from each layer:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[array([[ 0.11473606,  0.04093629,  0.06220959,  0.20997119,  0.09842109,\n",
       "          0.11125921,  0.18713514,  0.15842296,  0.08266869,  0.13873161],\n",
       "        [ 0.07934207,  0.07426302,  0.12934302, -0.02776962,  0.04423245,\n",
       "          0.01530347,  0.00319273, -0.04183384, -0.02657288,  0.02484454],\n",
       "        [ 0.00242184,  0.01565971, -0.085896  ,  0.03085865,  0.0314585 ,\n",
       "         -0.03370338,  0.00184695,  0.05904031,  0.02781612, -0.17790095]]),\n",
       " array([[1.07399692, 1.06087429, 1.07080794, 1.08270414, 1.07453131,\n",
       "         1.05702237, 1.07497389, 1.07034862, 1.08904458, 1.07360118]])]"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "layers[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also measure error on the test set:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "22.074740838759713"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pred, hidden = forward(test_x, layers)\n",
    "np.mean(mse(test_y, pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Wrap-up\n",
    "\n",
    "We learned a lot in this lesson!  You should now have a good idea of how to train a neural network with multiple layers, and use it to make predictions.  Trying changing batch size and learning rate to see how it affects the network.\n",
    "\n",
    "In the next lesson, we'll cover different loss and activation functions."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
